Hmbown/CodeWhale · error

Fleet task must name one member from the explicitly…

Error message

Fleet task {} must name one member from the explicitly selected Fleet

What it means

In exact-roster mode, every Fleet task must explicitly name one member of the selected Fleet via its worker member selector. freeze_fleet_task_members found a task with no worker selection at all, which cannot be frozen to a concrete member, so it bails.

Solutions

  1. Set task.worker to name one member that exists in the selected Fleet.
  2. Disable exact-roster mode if anonymous/role-posture tasks are intended.
  3. Remove or delete the task if it is no longer needed.

Example fix

// before
{"id": "t1"}  // no worker
// after
{"id": "t1", "worker": {"member": "agent-42"}}
Defensive patterns

Strategy: validation

Validate before calling

if require_exact_member { assert!(task.worker.as_ref().map_or(false, |w| w.member.is_some()), "task {} missing member", task.id); }

Prevention

When it happens

Trigger: Calling freeze_fleet_task_members with require_exact_member=true and a task whose worker field is None — i.e. the task relies on legacy role-label posture instead of naming a member.

Common situations: Old task specs written before member-selection became required; a user clearing the member field in the Fleet editor while the fleet enforces an exact roster; migrating legacy role-based tasks into an exact-roster fleet.

Understand the failure class

Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.

Related errors


AI-assisted analysis of Hmbown/CodeWhale@73e0f67d83 (2026-09-22). Data as JSON: /api/errors/32d0bb0a7dff4da4. Report an issue: GitHub.

Appendix: source

Thrown at crates/tui/src/fleet/worker_runtime.rs:150

/// Resolve and freeze every deterministic member selection before persistence.
///
/// Author-facing selectors may be ids, names, semantic roles, model labels, or
/// exact routes. The durable task stores the selected member's canonical id and
/// the identity/route inputs used for launch. Legacy `worker.role` remains a
/// posture when it does not name exactly one member; explicit
/// `worker.agent_profile` selectors fail closed when unknown or ambiguous, and
/// when the task's `worker.role` names a posture other than the selected
/// member's role.
pub(crate) fn freeze_fleet_task_members(
    tasks: &mut [FleetTaskSpec],
    agent_profiles: &[AgentProfile],
    require_exact_member: bool,
) -> Result<()> {
    for task in tasks {
        let Some(worker) = task.worker.as_ref() else {
            if require_exact_member {
                bail!(
                    "Fleet task {} must name one member from the explicitly selected Fleet",
                    task.id
                );
            }
            continue;
        };
        let explicit_selector = worker
            .agent_profile
            .as_deref()
            .map(str::trim)
            .filter(|selector| !selector.is_empty())
            .map(str::to_string);
        let legacy_role_selector = worker
            .role
            .as_deref()
            .map(str::trim)
            .filter(|selector| !selector.is_empty())
            .map(str::to_string);

View on GitHub (pinned to 73e0f67d83)