Hmbown/CodeWhale · error

Fleet worker {} has no persisted launch manifest

Error message

Fleet worker {} has no persisted launch manifest

What it means

validate_registered_launch_spec requires a coordination-registered AgentWorkerSpec to carry a launch_manifest (the durable record of prompt, generation, and profile used at launch). The registered spec had none, so its identity cannot be validated and the launch/restart is refused rather than silently re-derived.

Source

Thrown at crates/tui/src/fleet/manager.rs:2304

    // The outer machine-readable cap is workspace-relative and cannot yet be
    // intersected into a grandchild's narrower launch context. Fleet workers
    // are therefore truthful leaves in v0.9.1: the nested-agent surface is
    // disabled for the authority-bound subprocess.
    spec.max_spawn_depth = 0;
    spec.runtime_profile.max_spawn_depth = 0;
    if let Some(manifest) = spec.launch_manifest.as_mut() {
        manifest.generation = attempt.max(1);
        manifest.profile.max_spawn_depth = 0;
    }
    spec
}

fn validate_registered_launch_spec(
    registered: &AgentWorkerSpec,
    expected: &AgentWorkerSpec,
) -> Result<()> {
    let Some(registered_manifest) = registered.launch_manifest.as_ref() else {
        bail!(
            "Fleet worker {} has no persisted launch manifest",
            registered.worker_id
        );
    };
    if registered_manifest.prompt != registered.objective
        || !registered_prompt_matches_expected(&registered.objective, &expected.objective)
    {
        bail!(
            "Fleet worker {} has an inconsistent persisted prompt",
            registered.worker_id
        );
    }

    // Coordination may append a bounded decision projection to the prompt.
    // Every identity, route, permission, workspace, scope, and attempt field
    // must otherwise match a fresh derivation from this exact leased task.
    let mut registered_identity = registered.clone();
    let mut expected_identity = expected.clone();

View on GitHub (pinned to 0c42157ee5)

Solutions

  1. Cancel the stale task/worker so coordination forgets the manifest-less record, then restart to produce a fully specified launch
  2. Pin one Codewhale version for the lifetime of a run; upgrade between runs, not mid-run
  3. If reproducible on a fresh run, report it as a bug with the coordination record contents
Defensive patterns

Strategy: fallback

Type guard

fn registered_spec_is_complete(record: &AgentWorkerSpec) -> bool {
    record.launch_manifest.is_some()
}

Try / catch

match restart_with_registered_spec(&record) {
    Ok(x) => Ok(x),
    Err(err) if err.to_string().contains("no persisted launch manifest") => {
        // cancel the worker so a fresh record with manifest is written on retry
        Err(err)
    }
    Err(err) => Err(err),
}

Prevention

When it happens

Trigger: Validating a registered launch spec whose launch_manifest field is None: record written by an older Codewhale before manifests were mandatory, or a partially written coordination record.

Common situations: Upgrading Codewhale and resuming a fleet run created before the upgrade; resuming runs whose coordination store was partially restored.

Related errors


AI-assisted analysis of Hmbown/CodeWhale@0c42157ee5 (2026-08-20). Data as JSON: /api/errors/acc06cfa2c113d2b. Report an issue: GitHub.