Hmbown/CodeWhale · error · anyhow::Error
selected Fleet ' ' has an incomplete operator route…
Error message
selected Fleet '{}' has an incomplete operator route; provider and model must both be non-empty What it means
When applying a Fleet's operator route, the code requires the operator entry to carry both a provider id and a model id. If fleet.operator exists but either field is empty or whitespace, the route is considered incomplete and the TUI bails rather than guessing a default.
Solutions
- Edit the fleet config and fill in both operator.provider and operator.model
- Re-create the Fleet via the fleet command so both fields are populated
- Remove the incomplete operator entry if you don't want an operator route
Example fix
// before (fleet config)
operator = { provider = "", model = "gpt-5" }
// after
operator = { provider = "openai", model = "gpt-5" } Defensive patterns
Strategy: validation
Validate before calling
let op = fleet.operator.as_ref().ok_or("fleet missing operator")?; if op.provider.trim().is_empty() || op.model.trim().is_empty() { return Err("operator route incomplete"); } Prevention
- Validate fleet files after hand edits
- Never leave provider/model blank in templates — fail or fill at generation time
When it happens
Trigger: Selecting/activating a Fleet whose configuration has operator: { provider: "", model: ... } or vice versa — typically a hand-edited or partially written fleet config.
Common situations: Manually editing the fleet TOML/JSON and leaving provider blank; an older fleet file predating a required field; a templated config where a substitution produced an empty string.
Understand the failure class
Background: "is required", "must be set", "missing required field": configuration validation errors across open-source libraries — this error's family across 36 libraries.
Related errors
- agent profile provider cannot be empty
- agent profile provider must be a simple provider id
- duplicate fleet task id
- duplicate fleet worker id
- fleet cannot be empty
AI-assisted analysis of Hmbown/CodeWhale@73e0f67d83 (2026-09-22).
Data as JSON: /api/errors/d8af85a141f44bb3.
Report an issue: GitHub.
Appendix: source
Thrown at crates/tui/src/lib.rs:8323
})?
else {
return Ok(false);
};
let fleet_name = crate::safe_label::SafeLabel::phrase(&selected.name);
let (fleet, _) = crate::fleet::store::load_fleet_at(&selected.path).map_err(|_| {
anyhow!(
"selected Fleet '{}' ({}) is invalid or unreadable; inspect /fleet and repair or clear the selection.",
fleet_name,
selected.scope.label()
)
})?;
let Some(operator) = fleet.operator.as_ref() else {
return Ok(false);
};
let provider_id = operator.provider.trim();
let model_id = operator.model.trim();
if provider_id.is_empty() || model_id.is_empty() {
bail!(
"selected Fleet '{}' has an incomplete operator route; provider and model must both be non-empty",
fleet_name
);
}
let safe_provider_id = crate::safe_label::SafeLabel::identifier(provider_id);
let safe_model_id = crate::safe_label::SafeLabel::catalog_model(model_id);
let identity = config
.resolve_provider_pin_identity(provider_id)
.map_err(|error| {
anyhow!(
"selected Fleet '{}' operator provider '{}' is unavailable: {}",
fleet_name,
safe_provider_id,
crate::safe_label::safe_error_text(&error)
)
})?;
let resolved =View on GitHub (pinned to 73e0f67d83)