{"record":{"id":"50bd01a23b49ba55","repo":"BoundaryML/baml","slug":"e-span","errorCode":null,"errorMessage":"{e:?}","messagePattern":"\\{e:\\?\\}","errorType":"exception","errorClass":"napi::Error","httpStatus":null,"severity":"error","filePath":"engine/language_client_typescript/src/types/span.rs","lineNumber":27,"sourceCode":"\ncrate::lang_wrapper!(BamlSpan,\n  Option<baml_runtime::tracing::TracingCall>,\n  no_from,\n  rt: std::sync::Arc<CoreBamlRuntime>\n);\n\n#[napi]\nimpl BamlSpan {\n    #[napi(ts_return_type = \"BamlSpan\")]\n    pub fn new(\n        runtime: &BamlRuntime,\n        function_name: String,\n        args: serde_json::Value,\n        ctx: &RuntimeContextManager,\n        env_vars: serde_json::Value,\n    ) -> napi::Result<Self> {\n        let args: BamlValue = serde_json::from_value(args)\n            .map_err(|e| napi::Error::new(napi::Status::GenericFailure, format!(\"{e:?}\")))?;\n        let Some(args_map) = args.as_map() else {\n            return Err(invalid_argument_error(\"Invalid span args\"));\n        };\n\n        let env_vars: HashMap<String, String> = serde_json::from_value(env_vars)\n            .map_err(|e| napi::Error::new(napi::Status::GenericFailure, format!(\"{e:?}\")))?;\n\n        let call = runtime\n            .inner\n            .start_call(&function_name, args_map, &ctx.inner, &env_vars);\n        log::trace!(\"Starting call: {call:#?} for {function_name:?}\\n\");\n        Ok(Self {\n            inner: call.into(),\n            rt: runtime.inner.clone(),\n        })\n    }\n\n    // mthod to finish","sourceCodeStart":9,"sourceCodeEnd":45,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/engine/language_client_typescript/src/types/span.rs#L9-L45","documentation":"Span::new fails when the args JSON passed to start a call cannot be deserialized into a BamlValue, or when env_vars cannot be deserialized into HashMap<String,String>; the raw serde error is formatted with {e:?}. It indicates malformed input to the span/tracing API.","triggerScenarios":"Calling Span.new (via the runtime context manager) with args that aren't valid JSON values BAML understands, or env_vars containing non-string values (numbers, booleans, nested objects).","commonSituations":"Passing JS objects with unsupported field types, passing process.env values that were coerced incorrectly, or sending args that aren't a JSON object at all.","solutions":["Ensure args is a JSON object of serializable values before calling Span.new","Ensure env_vars is a flat object of string-to-string (e.g. { ...process.env })","Read the serde Debug error {e:?} to see the exact field/type that failed","Wrap args/env_vars in JSON.stringify/parse to normalize them"],"exampleFix":"// before\nconst span = ctx.startSpan('MyFunc', args, ctxManager, process.env);\n// after\nconst envVars = Object.fromEntries(Object.entries(process.env).map(([k, v]) => [k, String(v ?? '')]));\nconst span = ctx.startSpan('MyFunc', JSON.parse(JSON.stringify(args)), ctxManager, envVars);","handlingStrategy":"validation","validationCode":"function assertSpanInputs(args, envVars) {\n  if (typeof args !== 'object' || args === null || Array.isArray(args)) throw new Error('span args must be a JSON object');\n  const badEnv = Object.entries(envVars ?? {}).filter(([, v]) => typeof v !== 'string');\n  if (badEnv.length) throw new Error('env_vars values must all be strings: ' + badEnv.map(([k]) => k).join(','));\n}","typeGuard":"const isValidSpanArgs = (args: unknown): args is Record<string, unknown> =>\n  typeof args === 'object' && args !== null && !Array.isArray(args);","tryCatchPattern":"let span;\ntry {\n  span = ctx.startSpan(fnName, args, ctxManager, envVars);\n} catch (e) {\n  console.error('startSpan failed:', String(e));\n  span = null; // proceed without tracing rather than crashing\n}","preventionTips":["Always pass env vars as a flat string-to-string object","Serialize args through JSON.stringify/parse to strip non-JSON values","Log args shape in dev mode before starting spans","Keep span payloads limited to plain serializable data"],"tags":["serialization","serde","span","typescript"],"backgroundTag":"json-unmarshal-failed","analyzedSha":"bd85ce9dee1463ff04d27efd20531013a4ff46c1","analyzedAt":"2026-09-12T03:38:25.718Z","contentChangedAt":"2026-09-12T03:38:25.718Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}