Hmbown/CodeWhale · error
write-capable Fleet worker '{}' has no launch manifest
Error message
write-capable Fleet worker '{}' has no launch manifest What it means
`authority_envelope_for_worker` builds the tool-authority envelope for a Fleet worker (fleet/executor.rs:148). When `spec.runtime_profile.permissions.write` is true, the spec must carry a `launch_manifest` supplying `writable_files` and `coordination_contracts`; None is an invariant violation. The standard builder in worker_runtime always attaches a manifest for write-capable specs (worker_runtime.rs:247-292), so this fires when a spec was constructed outside that path.
Source
Thrown at crates/tui/src/fleet/executor.rs:149
Ok(build_worker_exec_command_from_prompt(
codewhale_binary,
launch_spec.objective.clone(),
exec_config,
Some(worker_model.as_str()),
worker_provider.as_deref(),
worker_reasoning_effort.as_deref(),
Some(&authority),
))
}
pub(crate) fn authority_envelope_for_worker(
spec: &AgentWorkerSpec,
task_spec: &FleetTaskSpec,
) -> Result<ToolAuthorityEnvelope> {
let (authority, writable_roots, writable_files, coordination_contracts) =
if spec.runtime_profile.permissions.write {
let manifest = spec.launch_manifest.as_ref().ok_or_else(|| {
anyhow::anyhow!(
"write-capable Fleet worker '{}' has no launch manifest",
spec.worker_id
)
})?;
(
ToolMutationAuthority::ScopedWrite,
super::worker_runtime::fleet_runtime_write_roots(task_spec)?,
manifest.writable_files.clone(),
manifest.coordination_contracts.clone(),
)
} else {
(
ToolMutationAuthority::ReadOnly,
Vec::new(),
Vec::new(),
Vec::new(),
)
};View on GitHub (pinned to 8880682c63)
Solutions
- Attach a launch manifest (writable roots/files plus coordination contracts) whenever write permission is granted — reuse the worker_runtime builder that constructs it
- Or run the worker read-only (`permissions.write = false`)
- Centralize AgentWorkerSpec construction so manifests cannot be skipped
Example fix
// before
let spec = AgentWorkerSpec { /* ... */, launch_manifest: None };
// with permissions.write == true this fails; after either
let spec = AgentWorkerSpec { /* ... */, launch_manifest: Some(manifest) };
// or keep it read-only
let mut runtime_profile = runtime_profile.clone();
runtime_profile.permissions.write = false; Defensive patterns
Strategy: type-guard
Type guard
fn write_spec_has_manifest(spec: &AgentWorkerSpec) -> bool {
!spec.runtime_profile.permissions.write || spec.launch_manifest.is_some()
}
assert!(write_spec_has_manifest(&spec)); Try / catch
match authority_envelope_for_worker(&spec, &task) {
Err(err) if err.to_string().contains("no launch manifest") => {
// rebuild the spec via the standard worker_runtime builder,
// or downgrade the worker to read-only permissions
}
other => other?,
} Prevention
- Never construct write-capable AgentWorkerSpecs by hand; use the worker_runtime builder that attaches the manifest
- Assert the manifest invariant in tests for custom executors
- Review any code path that mutates permissions.write after spec construction
When it happens
Trigger: A hand-constructed `AgentWorkerSpec` grants write permission with `launch_manifest: None`; a read-only spec's permissions are flipped to write without adding a manifest; a refactor bypasses the standard spec builder.
Common situations: Custom fleet schedulers/executors; tests assembling minimal specs by hand; partially migrated code paths.
Related errors
- generated invalid permissions document for {}; file contents
- Runtime API capability '${options.capability}' is not availa
- Runtime API request failed (${response.status}) for ${method
- failed to parse serialized config for comment merge; file co
- failed to parse permissions at {}; file contents were omitte
AI-assisted analysis of Hmbown/CodeWhale@8880682c63 (2026-08-16).
Data as JSON: /api/errors/6bfa0c645714a2c7.
Report an issue: GitHub.