{"record":{"id":"d3422fee15a2c62f","repo":"BoundaryML/baml","slug":"0-playground-telemetry","errorCode":null,"errorMessage":"{0}","messagePattern":"\\{0\\}","errorType":"exception","errorClass":"TelemetryError","httpStatus":null,"severity":"error","filePath":"baml_language/crates/baml_lsp_server/src/playground_telemetry.rs","lineNumber":193,"sourceCode":"        .iter()\n        .map(|root| root.display().to_string())\n        .collect();\n    tracing::warn!(\n        \"Telemetry: the profiler writes one store per process, so runs started \\\n         here for {} are recorded under {}. Those projects will look empty in \\\n         the Telemetry tab; run them from the CLI to record them in place.\",\n        others.join(\", \"),\n        workspace_roots[0].display()\n    );\n}\n\n#[derive(Debug, thiserror::Error)]\npub enum TelemetryError {\n    /// No store yet: nothing has run under this project since the profiler\n    /// started writing. This is an empty state, not a failure.\n    #[error(\"no profile store at {0}\")]\n    NoStore(PathBuf),\n    #[error(\"{0}\")]\n    Query(String),\n}\n\n/// One execution: a row in the executions table.\n#[derive(Debug, Clone, Serialize)]\n#[serde(rename_all = \"camelCase\")]\npub struct ExecutionRow {\n    pub execution_id: String,\n    pub entry_fqn: Option<String>,\n    pub source_label: Option<String>,\n    pub revision_id: Option<String>,\n    pub status: Option<String>,\n    /// `complete` | `no_root_ended` | `root_started_lost` | `index_corrupt`.\n    /// Anything but `complete` means the row below it is partial evidence.\n    pub index_state: Option<String>,\n    /// `complete` | `partial` | `none` — whether captured values survived.\n    pub value_state: Option<String>,\n    pub started_at_ms: Option<i64>,","sourceCodeStart":175,"sourceCodeEnd":211,"githubUrl":"https://github.com/BoundaryML/baml/blob/bd85ce9dee1463ff04d27efd20531013a4ff46c1/baml_language/crates/baml_lsp_server/src/playground_telemetry.rs#L175-L211","documentation":"TelemetryError::Query(String) carries an opaque message for failures while querying the profile store (e.g. building or executing a query over recorded executions). The Display impl just renders the inner string, so the message text is whatever the query layer produced.","triggerScenarios":"A telemetry query against the profile store failing — malformed query parameters, corrupt/unreadable store contents, or an internal query-construction error surfaced through TelemetryError::Query.","commonSituations":"Corrupted profile store from a crashed writer; incompatible store schema after a version upgrade; invalid filter/limit parameters passed from the playground UI to the telemetry query API.","solutions":["Read the inner message to see what the query layer complained about.","Delete/regenerate the profile store by re-running your BAML functions if it may be corrupt.","Check for a version mismatch between the profiler that wrote the store and the LSP server reading it.","Validate query parameters (filters, limits) passed to the telemetry endpoint."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"match telemetry.query_executions() {\n    Err(TelemetryError::Query(msg)) => {\n        tracing::warn!(\"telemetry query failed: {msg}\");\n        // consider regenerating the store\n    }\n    other => return other.map_err(Into::into),\n}","preventionTips":["Keep the LSP server and profiler versions in sync","Validate filter/limit parameters before sending them to the telemetry API","Regenerate the profile store after crashy sessions"],"tags":["rust","telemetry","query","profiling"],"backgroundTag":"database-query-failed","analyzedSha":"bd85ce9dee1463ff04d27efd20531013a4ff46c1","analyzedAt":"2026-09-12T03:38:25.718Z","contentChangedAt":"2026-09-12T03:38:25.718Z","schemaVersion":2},"datasetVersion":"2026-09-14T11:17:12.474Z"}