{"record":{"id":"034979f5f1b3d13a","repo":"Hmbown/CodeWhale","slug":"fleet-task-metadata-key-is-reserved-for-the-durable-runtime","errorCode":null,"errorMessage":"fleet task {} metadata key {} is reserved for the durable Runtime selection receipt","messagePattern":"fleet task (.+?) metadata key (.+?) is reserved for the durable Runtime selection receipt","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/tui/src/fleet/task_spec.rs","lineNumber":181,"sourceCode":"        validate_fleet_identity(\"task id\", &task.id)?;\n        if !ids.insert(task.id.clone()) {\n            bail!(\"duplicate fleet task id {}\", task.id);\n        }\n        validate_fleet_name(&format!(\"task {} name\", task.id), &task.name)?;\n        if task.instructions.trim().is_empty() {\n            bail!(\"fleet task {} instructions cannot be empty\", task.id);\n        }\n        if let Some(objective) = &task.objective\n            && objective.trim().is_empty()\n        {\n            bail!(\"fleet task {} objective cannot be empty\", task.id);\n        }\n        validate_worker_profile(&task.id, task.worker.as_ref())?;\n        if task\n            .metadata\n            .contains_key(super::worker_runtime::FROZEN_FLEET_MEMBER_METADATA_KEY)\n        {\n            bail!(\n                \"fleet task {} metadata key {} is reserved for the durable Runtime selection receipt\",\n                task.id,\n                super::worker_runtime::FROZEN_FLEET_MEMBER_METADATA_KEY\n            );\n        }\n        validate_tags(&task.id, &task.tags)?;\n        validate_workspace_requirements(task)?;\n    }\n    let mut worker_ids = BTreeSet::new();\n    for worker in &doc.workers {\n        validate_fleet_identity(\"worker id\", &worker.id)?;\n        if !worker_ids.insert(worker.id.clone()) {\n            bail!(\"duplicate fleet worker id {}\", worker.id);\n        }\n        validate_fleet_name(&format!(\"worker {} name\", worker.id), &worker.name)?;\n        if worker.trust_level.is_some() {\n            bail!(\n                \"fleet worker {} trust_level is a legacy compatibility field, not Fleet identity; configure execution authority through Runtime policy\",","sourceCodeStart":163,"sourceCodeEnd":199,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/73e0f67d83c59909b571efdfc88c4bc28c309cb1/crates/tui/src/fleet/task_spec.rs#L163-L199","documentation":"The metadata key FROZEN_FLEET_MEMBER_METADATA_KEY (from fleet::worker_runtime) is reserved: it stores the durable Runtime selection receipt written by the system. validate_task_spec_document (crates/tui/src/fleet/task_spec.rs:181) rejects task specs that set it themselves, since author-supplied values would collide with or forge the Runtime receipt.","triggerScenarios":"A task spec includes the reserved key in a task's `metadata` map; detected during validate_task_spec_document via load_task_spec_document or create_queued_run_with_descriptor.","commonSituations":"Hand-copying metadata from a previously generated run artifact (which contains the frozen receipt) back into a new spec; snapshot/export tooling round-tripping internal metadata.","solutions":["Remove the reserved metadata key from the task spec's metadata map","Let the Runtime write the selection receipt itself during the run","When reusing exported specs, strip system-generated metadata keys"],"exampleFix":"# before\n[[tasks]]\nid = \"build\"\ninstructions = \"Run build\"\n[tasks.metadata]\n\"codewhale.frozen_fleet_member\" = \"...\"\n# after\n[[tasks]]\nid = \"build\"\ninstructions = \"Run build\"\n# (receipt is written by Runtime, not the spec)","handlingStrategy":"validation","validationCode":"use fleet::worker_runtime::FROZEN_FLEET_MEMBER_METADATA_KEY;\nif task.metadata.contains_key(FROZEN_FLEET_MEMBER_METADATA_KEY) {\n    return Err(\"strip reserved frozen-member metadata from the spec\".into());\n}","typeGuard":null,"tryCatchPattern":"match load_task_spec_document(path) {\n    Ok(doc) => doc,\n    Err(e) if e.to_string().contains(\"reserved for the durable Runtime selection receipt\") => {\n        eprintln!(\"{}: remove system-written metadata key\", path.display());\n        return;\n    }\n    Err(e) => return Err(e),\n}","preventionTips":["When round-tripping exported run artifacts, strip system metadata keys","Treat FROZEN_FLEET_MEMBER_METADATA_KEY as Runtime-write-only","Allow only an explicit allowlist of metadata keys in hand-written specs"],"tags":["config","fleet","metadata","validation"],"backgroundTag":"reserved-metadata-key","analyzedSha":"73e0f67d83c59909b571efdfc88c4bc28c309cb1","analyzedAt":"2026-09-22T01:30:00.501Z","contentChangedAt":"2026-09-22T01:30:00.501Z","schemaVersion":2},"datasetVersion":"2026-09-22T11:17:16.035Z"}