{"record":{"id":"c97f420a379a5b91","repo":"Hmbown/CodeWhale","slug":"fleet-worker-has-an-inconsistent-persisted-prom","errorCode":null,"errorMessage":"Fleet worker {} has an inconsistent persisted prompt","messagePattern":"Fleet worker (.+?) has an inconsistent persisted prompt","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/tui/src/fleet/manager.rs","lineNumber":2312,"sourceCode":"        manifest.profile.max_spawn_depth = 0;\n    }\n    spec\n}\n\nfn validate_registered_launch_spec(\n    registered: &AgentWorkerSpec,\n    expected: &AgentWorkerSpec,\n) -> Result<()> {\n    let Some(registered_manifest) = registered.launch_manifest.as_ref() else {\n        bail!(\n            \"Fleet worker {} has no persisted launch manifest\",\n            registered.worker_id\n        );\n    };\n    if registered_manifest.prompt != registered.objective\n        || !registered_prompt_matches_expected(&registered.objective, &expected.objective)\n    {\n        bail!(\n            \"Fleet worker {} has an inconsistent persisted prompt\",\n            registered.worker_id\n        );\n    }\n\n    // Coordination may append a bounded decision projection to the prompt.\n    // Every identity, route, permission, workspace, scope, and attempt field\n    // must otherwise match a fresh derivation from this exact leased task.\n    let mut registered_identity = registered.clone();\n    let mut expected_identity = expected.clone();\n    registered_identity.objective.clear();\n    expected_identity.objective.clear();\n    if let Some(manifest) = registered_identity.launch_manifest.as_mut() {\n        manifest.prompt.clear();\n    }\n    if let Some(manifest) = expected_identity.launch_manifest.as_mut() {\n        manifest.prompt.clear();\n    }","sourceCodeStart":2294,"sourceCodeEnd":2330,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/0c42157ee52f9d55af2b506d71b46249910f77d3/crates/tui/src/fleet/manager.rs#L2294-L2330","documentation":"The registered launch manifest's prompt must equal the registered objective, and the registered objective must equal the freshly expected objective optionally extended with the bounded 'Accepted coordination decisions' projection header. A mismatch means the persisted prompt no longer describes the task this lease is for, and relaunching from it could run the wrong instructions.","triggerScenarios":"The task's objective was edited or re-derived differently from when the worker registered (spec change, migration, partial event replay), so manifest.prompt diverges from objective/expected prompt.","commonSituations":"Editing task specs between retries; resuming a run after a Codewhale upgrade that changed prompt derivation; ledger rebuilt from a subset of events.","solutions":["Do not edit task specs mid-run; cancel and create a new run with the edited objective","Complete or cancel the drifted worker so a fresh, consistent launch record is created on retry","Verify all fleet processes use the same Codewhale version so prompt derivation is stable"],"exampleFix":null,"handlingStrategy":"fallback","validationCode":null,"typeGuard":null,"tryCatchPattern":"match validate_registered_launch_spec(&record.spec, &expected) {\n    Ok(()) => Ok(()),\n    Err(err) if err.to_string().contains(\"inconsistent persisted prompt\") => {\n        // objective drifted: cancel task and re-lease instead of relaunching stale instructions\n        Err(err)\n    }\n    Err(err) => Err(err),\n}","preventionTips":["Freeze task objectives for the lifetime of a run; edit specs only in new runs","Keep fleet binaries version-aligned so prompt derivation cannot drift"],"tags":["fleet","prompt-integrity","state-validation","rust","codewhale"],"backgroundTag":"persisted-state-divergence","analyzedSha":"0c42157ee52f9d55af2b506d71b46249910f77d3","analyzedAt":"2026-08-20T21:50:45.477Z","contentChangedAt":null,"schemaVersion":2},"datasetVersion":"2026-09-14T05:17:10.506Z"}