{"record":{"id":"43479f9a095b493f","repo":"zeroclaw-labs/zeroclaw","slug":"failed-to-prepare-device-select","errorCode":null,"errorMessage":"Failed to prepare device select","messagePattern":"Failed to prepare device select","errorType":"panic","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/zeroclaw-gateway/src/api_pairing.rs","lineNumber":68,"sourceCode":"                name TEXT,\n                device_type TEXT,\n                paired_at TEXT NOT NULL,\n                last_seen TEXT NOT NULL,\n                ip_address TEXT,\n                capabilities TEXT\n            )\",\n        )\n        .expect(\"Failed to create devices table\");\n\n        // Additive migration for DBs created before the capabilities column existed.\n        // SQLite has no IF NOT EXISTS for columns; the duplicate-column error here is benign.\n        let _ = conn.execute(\"ALTER TABLE devices ADD COLUMN capabilities TEXT\", []);\n\n        // Warm the in-memory cache from DB\n        let mut cache = HashMap::new();\n        let mut stmt = conn\n            .prepare(\"SELECT token_hash, id, name, device_type, paired_at, last_seen, ip_address, capabilities FROM devices\")\n            .expect(\"Failed to prepare device select\");\n        let rows = stmt\n            .query_map([], |row| {\n                let token_hash: String = row.get(0)?;\n                let id: String = row.get(1)?;\n                let name: Option<String> = row.get(2)?;\n                let device_type: Option<String> = row.get(3)?;\n                let paired_at_str: String = row.get(4)?;\n                let last_seen_str: String = row.get(5)?;\n                let ip_address: Option<String> = row.get(6)?;\n                let capabilities_json: Option<String> = row.get(7)?;\n                let paired_at = DateTime::parse_from_rfc3339(&paired_at_str)\n                    .map(|dt| dt.with_timezone(&Utc))\n                    .unwrap_or_else(|_| Utc::now());\n                let last_seen = DateTime::parse_from_rfc3339(&last_seen_str)\n                    .map(|dt| dt.with_timezone(&Utc))\n                    .unwrap_or_else(|_| Utc::now());\n                let capabilities = capabilities_json\n                    .as_deref()","sourceCodeStart":50,"sourceCodeEnd":86,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-gateway/src/api_pairing.rs#L50-L86","documentation":"Error \"Failed to prepare device select\" thrown in zeroclaw-labs/zeroclaw.","triggerScenarios":"Thrown at crates/zeroclaw-gateway/src/api_pairing.rs:68 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Restart the gateway; a failed statement preparation usually indicates a corrupted or incompatible database.","Recreate the device registry database if schema migration failed."],"exampleFix":null,"handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}