{"record":{"id":"edcd66c0173aca78","repo":"Hmbown/CodeWhale","slug":"selected-fleet-operator-route-is-invalid","errorCode":null,"errorMessage":"selected Fleet '{}' operator route {}/{} is invalid: {}","messagePattern":"selected Fleet '(.+?)' operator route (.+?)/(.+?) is invalid: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/tui/src/lib.rs","lineNumber":8344,"sourceCode":"        );\n    }\n    let safe_provider_id = crate::safe_label::SafeLabel::identifier(provider_id);\n    let safe_model_id = crate::safe_label::SafeLabel::catalog_model(model_id);\n\n    let identity = config\n        .resolve_provider_pin_identity(provider_id)\n        .map_err(|error| {\n            anyhow!(\n                \"selected Fleet '{}' operator provider '{}' is unavailable: {}\",\n                fleet_name,\n                safe_provider_id,\n                crate::safe_label::safe_error_text(&error)\n            )\n        })?;\n    let resolved =\n        crate::route_runtime::resolve_runtime_route_for_identity(config, &identity, Some(model_id))\n            .map_err(|error| {\n                anyhow!(\n                    \"selected Fleet '{}' operator route {}/{} is invalid: {}\",\n                    fleet_name,\n                    safe_provider_id,\n                    safe_model_id,\n                    crate::safe_label::safe_error_text(&error)\n                )\n            })?;\n    let mut selected_config = *resolved.config;\n    selected_config.fleet_operator_route_applied = true;\n    selected_config.fleet_operator_reasoning_applied = false;\n    if !explicit_reasoning_override\n        && let Some(reasoning) = operator\n            .reasoning\n            .as_deref()\n            .map(str::trim)\n            .filter(|reasoning| !reasoning.is_empty())\n        && let Some(reasoning) = normalize_cli_reasoning_effort(reasoning).map_err(|error| {\n            anyhow!(","sourceCodeStart":8326,"sourceCodeEnd":8362,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/73e0f67d83c59909b571efdfc88c4bc28c309cb1/crates/tui/src/lib.rs#L8326-L8362","documentation":"Thrown when the Fleet operator's provider identity resolves but `resolve_runtime_route_for_identity` rejects the provider/model pair, so no valid runtime route exists for the operator's requested model. The error from the route resolver is sanitized and appended.","triggerScenarios":"A turn starts with a selected Fleet whose operator route pins `provider/model` where the model is not offered by that provider, the model id is misspelled or deprecated, or route resolution fails for that identity.","commonSituations":"Model renamed or removed by the provider after the fleet was authored; typo in the model id; config profile lacks the model mapping the fleet expects; provider capability changes between versions.","solutions":["Update the fleet's operator model id to one currently offered by the provider.","Verify the model id spelling and that the provider config exposes it.","Run /fleet and re-select or re-author the fleet with a valid route.","Check release notes for model deprecations if this fleet worked previously."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"// confirm the pinned model is offered by the provider before selecting the fleet\nlet model_ok = config.providers.iter()\n    .filter(|p| p.id == fleet.operator.provider)\n    .any(|p| p.models.iter().any(|m| m.id == fleet.operator.model));","typeGuard":null,"tryCatchPattern":null,"preventionTips":["After provider model-list changes, re-validate fleet operator routes.","Use current model ids from the provider's catalog, not stale copies.","Re-author fleets after provider deprecations announced in release notes."],"tags":["fleet","route","model","config"],"backgroundTag":"invalid-config-value","analyzedSha":"73e0f67d83c59909b571efdfc88c4bc28c309cb1","analyzedAt":"2026-09-22T01:30:00.501Z","contentChangedAt":"2026-09-22T01:30:00.501Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}