{"record":{"id":"17dcf553c80420eb","repo":"tinyhumansai/openhuman","slug":"field-array-must-only-contain-strings","errorCode":null,"errorMessage":"'{field}' array must only contain strings","messagePattern":"'(.+?)' array must only contain strings","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/openhuman/tools/impl/system/proxy_config.rs","lineNumber":79,"sourceCode":"        }\n    }\n\n    fn parse_string_list(raw: &Value, field: &str) -> anyhow::Result<Vec<String>> {\n        if let Some(raw_string) = raw.as_str() {\n            return Ok(raw_string\n                .split(',')\n                .map(str::trim)\n                .filter(|entry| !entry.is_empty())\n                .map(ToOwned::to_owned)\n                .collect());\n        }\n\n        if let Some(array) = raw.as_array() {\n            let mut out = Vec::new();\n            for item in array {\n                let value = item\n                    .as_str()\n                    .ok_or_else(|| anyhow::anyhow!(\"'{field}' array must only contain strings\"))?;\n                let trimmed = value.trim();\n                if !trimmed.is_empty() {\n                    out.push(trimmed.to_string());\n                }\n            }\n            return Ok(out);\n        }\n\n        anyhow::bail!(\"'{field}' must be a string or string[]\")\n    }\n\n    fn parse_optional_string_update(args: &Value, field: &str) -> anyhow::Result<MaybeSet<String>> {\n        let Some(raw) = args.get(field) else {\n            return Ok(MaybeSet::Unset);\n        };\n\n        if raw.is_null() {\n            return Ok(MaybeSet::Null);","sourceCodeStart":61,"sourceCodeEnd":97,"githubUrl":"https://github.com/tinyhumansai/openhuman/blob/749120085864ce16e0f273c7b86fac7740b39c5b/src/openhuman/tools/impl/system/proxy_config.rs#L61-L97","documentation":"parse_string_list accepts a proxy list field ('no_proxy' etc.) as either a comma-separated string or an array; this fires when an array element is not a string (number, object, null). The {field} names which arguments key contained the bad element.","triggerScenarios":"Thrown at src/openhuman/tools/impl/system/proxy_config.rs:79 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Make every element of the array a string, e.g. [\"provider.openai\", \"tool.http_request\"]","Or pass a single comma-separated string instead of an array"],"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-14T05:17:10.506Z"}