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(®istered.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
- Cancel the stale task/worker so coordination forgets the manifest-less record, then restart to produce a fully specified launch
- Pin one Codewhale version for the lifetime of a run; upgrade between runs, not mid-run
- 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
- Upgrade Codewhale between runs, not during one
- Treat missing-manifest records as stale and retire them via cancel instead of reusing
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
- Fleet worker {} has an inconsistent persisted prompt
- Fleet worker {} persisted launch spec does not match the exa
- fleet run {} is already terminal ({lifecycle:?})
- fleet manager for run {} exited with open work; wait for sta
- worker {worker_id} no longer has that running fleet task
AI-assisted analysis of Hmbown/CodeWhale@0c42157ee5 (2026-08-20).
Data as JSON: /api/errors/acc06cfa2c113d2b.
Report an issue: GitHub.