Hmbown/CodeWhale · error
invalid frozen Fleet member snapshot
Error message
invalid frozen Fleet member snapshot
What it means
A frozen Fleet member snapshot failed deserialization validation: it must have schema_version 1 and non-empty id and role. This snapshot is persisted with the run and thawed to reconstruct the AgentProfile; an unrecognized schema or blank identity means the frozen data cannot be trusted to dispatch the worker.
Solutions
- Recreate the run or re-freeze the member from a valid AgentProfile.
- Check the Codewhale version that wrote the frozen state; migrate or regenerate the snapshot.
- Ensure the member profile has non-empty id and role before freezing.
Defensive patterns
Strategy: type-guard
Validate before calling
fn snapshot_thawable(s: &FrozenMember) -> bool { s.schema_version == 1 && !s.id.trim().is_empty() && !s.role.trim().is_empty() } Type guard
fn is_valid_snapshot(s: &FrozenMember) -> bool { s.schema_version == 1 && !s.id.trim().is_empty() && !s.role.trim().is_empty() } Try / catch
match resolve_task_agent_profile(...) { Ok(p) => p, Err(e) => { log::error("frozen snapshot invalid: {e}"); re_freeze_or_fail_run() } } Prevention
- Version-check frozen state before thawing
- Regenerate frozen snapshots after upgrades
- Never hand-edit run state files
When it happens
Trigger: Calling into_profile (via resolve_task_agent_profile) on a frozen member snapshot whose schema_version is not 1, or whose id or role is empty/whitespace after a round-trip through storage.
Common situations: Run state written by an older/newer Codewhale version with a different snapshot schema; corrupted or hand-edited run state files; a member profile created without an id or role then frozen.
Understand the failure class
Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.
Related errors
- Unsupported sub-agent state schema
- agent profile cannot be empty
- agent profile must be a simple token
- agent profile may not disable approval_required
- agent profile may not request allow_shell=true
AI-assisted analysis of Hmbown/CodeWhale@73e0f67d83 (2026-09-22).
Data as JSON: /api/errors/fba367c7105ad07a.
Report an issue: GitHub.
Appendix: source
Thrown at crates/tui/src/fleet/worker_runtime.rs:86
display_name: profile.display_name.clone(),
description: profile.description.clone(),
requires: profile.requires.clone(),
slot: profile.profile.slot.as_str().to_string(),
role: canonical_public_role_name(&profile.profile.role.name),
role_description: profile.profile.role.description.clone(),
role_instructions: profile.profile.role.instructions.clone(),
loadout: profile.profile.loadout.as_str().to_string(),
provider: profile.profile.provider.clone(),
model: profile.profile.model.clone(),
reasoning_effort: profile.profile.reasoning_effort.clone(),
max_spawn_depth: profile.profile.delegation.max_spawn_depth,
origin: profile.origin,
}
}
fn into_profile(self) -> Result<AgentProfile> {
if self.schema_version != 1 || self.id.trim().is_empty() || self.role.trim().is_empty() {
bail!("invalid frozen Fleet member snapshot");
}
Ok(AgentProfile {
id: self.id,
display_name: self.display_name,
description: self.description,
requires: self.requires,
profile: FleetProfile {
slot: FleetSlot::from_name(&self.slot),
role: FleetProfileRole {
name: self.role,
description: self.role_description,
instructions: self.role_instructions,
},
loadout: FleetLoadout::from_name(&self.loadout),
model: self.model,
provider: self.provider,
reasoning_effort: self.reasoning_effort,
// Authority is always derived from live Runtime policy. AView on GitHub (pinned to 73e0f67d83)