{"record":{"id":"41af7ea7237355ae","repo":"zeroclaw-labs/zeroclaw","slug":"model-route-with-empty-hint","errorCode":null,"errorMessage":"model route with empty hint","messagePattern":"model route with empty hint","errorType":"console","errorClass":"DiagItem","httpStatus":null,"severity":"warning","filePath":"crates/zeroclaw-runtime/src/doctor/mod.rs","lineNumber":1245,"sourceCode":"            }\n        }\n        if !found_any {\n            items.push(DiagItem::error(cat, \"no model providers configured\"));\n        }\n    }\n\n    // Gateway port range\n    let port = config.gateway.port;\n    if port > 0 {\n        items.push(DiagItem::ok(cat, format!(\"gateway port: {port}\")));\n    } else {\n        items.push(DiagItem::error(cat, \"gateway port is 0 (invalid)\"));\n    }\n\n    // Model routes validation\n    for route in &config.model_routes {\n        if route.hint.is_empty() {\n            items.push(DiagItem::warn(cat, \"model route with empty hint\"));\n        }\n        if let Some(reason) = provider_validation_error(config, &route.model_provider) {\n            items.push(DiagItem::warn(\n                cat,\n                format!(\n                    \"model route \\\"{}\\\" uses invalid model_provider \\\"{}\\\": {}\",\n                    route.hint, route.model_provider, reason\n                ),\n            ));\n        }\n        if route.model.is_empty() {\n            items.push(DiagItem::warn(\n                cat,\n                format!(\"model route \\\"{}\\\" has empty model\", route.hint),\n            ));\n        }\n    }\n","sourceCodeStart":1227,"sourceCodeEnd":1263,"githubUrl":"https://github.com/zeroclaw-labs/zeroclaw/blob/88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc/crates/zeroclaw-runtime/src/doctor/mod.rs#L1227-L1263","documentation":"Requests select a model route by matching its `hint`; a `[[model_routes]]` entry with an empty hint can never match anything useful. Doctor flags it during config semantic checks as a dead or misdefined route.","triggerScenarios":"A model_routes entry with `hint = \"\"` or a missing hint key; `zeroclaw doctor` prints `model route with empty hint`.","commonSituations":"Route tables drafted with placeholders; hint fields dropped during hand-editing or templating.","solutions":["Give the route a non-empty hint string that requests can actually match","Or remove the dead route entry from the config","Re-run `zeroclaw doctor` to confirm route checks pass"],"exampleFix":"# before\n[[model_routes]]\nhint = \"\"\nmodel = \"gpt-4o-mini\"\n\n# after\n[[model_routes]]\nhint = \"cheap\"\nmodel = \"gpt-4o-mini\"","handlingStrategy":"validation","validationCode":"fn validate_model_routes(cfg: &Config) -> Vec<String> {\n    cfg.model_routes\n        .iter()\n        .filter(|r| r.hint.is_empty() || r.model.is_empty())\n        .map(|r| format!(\"route incomplete: {r:?}\"))\n        .collect()\n}\n// deploy only when the returned Vec is empty","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Fill hint and model in the same edit when adding a route","Run `zeroclaw doctor` as a pre-deploy check"],"tags":["zeroclaw","doctor","config","model-routes","hint"],"backgroundTag":"model-route-misconfigured","analyzedSha":"88bb9c8533fc57ed7a03e36ca7c9ed2bf8336dcc","analyzedAt":"2026-08-23T01:07:41.857Z","schemaVersion":2},"datasetVersion":"2026-08-23T08:06:27.607Z"}