{"record":{"id":"b4705facab2664e0","repo":"Hmbown/CodeWhale","slug":"fleet-task-environment-variable-name-cannot-be","errorCode":null,"errorMessage":"fleet task {} environment variable name cannot be empty","messagePattern":"fleet task (.+?) environment variable name cannot be empty","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"crates/tui/src/fleet/task_spec.rs","lineNumber":468,"sourceCode":"        }\n        if !seen.insert(tag) {\n            bail!(\"fleet task {task_id} has duplicate tag {tag}\");\n        }\n    }\n    Ok(())\n}\n\nfn validate_workspace_requirements(task: &FleetTaskSpec) -> Result<()> {\n    let Some(workspace) = &task.workspace else {\n        return Ok(());\n    };\n    let env = workspace.environment.as_ref();\n    for name in env\n        .into_iter()\n        .flat_map(|env| env.required.iter().chain(env.allowlist.iter()))\n    {\n        if name.trim().is_empty() {\n            bail!(\n                \"fleet task {} environment variable name cannot be empty\",\n                task.id\n            );\n        }\n    }\n    Ok(())\n}\n\nfn verify_exit_code(exit_code: Option<i32>) -> FleetTaskVerification {\n    match exit_code {\n        Some(0) => pass(\"exit_code=0\"),\n        Some(code) => fail(\n            FleetTaskFailureKind::Task,\n            0.0,\n            format!(\"exit_code={code}\"),\n            \"worker task exited unsuccessfully\",\n        ),\n        None => fail(","sourceCodeStart":450,"sourceCodeEnd":486,"githubUrl":"https://github.com/Hmbown/CodeWhale/blob/73e0f67d83c59909b571efdfc88c4bc28c309cb1/crates/tui/src/fleet/task_spec.rs#L450-L486","documentation":"Fleet task spec validation rejects an empty or whitespace-only environment variable name in the task workspace's required or allowlisted env list. A blank name cannot be resolved or injected into the worker environment, so the spec is rejected.","triggerScenarios":"Calling validate_task_spec_document where workspace.environment.required or workspace.environment.allowlist contains \"\" or \"  \".","commonSituations":"Hand-edited workspace config with an empty list entry; generated specs where an env-name field defaulted to empty string; splitting a comma-separated env list that had an empty segment (e.g. \"FOO,,BAR\").","solutions":["Remove blank entries from environment.required and environment.allowlist.","Trim and filter env-name inputs at spec build time.","Give the env entry a real variable name or drop it."],"exampleFix":"// before\n\"environment\": {\"required\": [\"API_KEY\", \"\"]}\n// after\n\"environment\": {\"required\": [\"API_KEY\"]}","handlingStrategy":"validation","validationCode":"fn env_names_valid(env: &Environment) -> bool { env.required.iter().chain(env.allowlist.iter()).all(|n| !n.trim().is_empty()) }","typeGuard":"fn valid_env_name(n: &str) -> bool { !n.trim().is_empty() }","tryCatchPattern":null,"preventionTips":["Filter blank entries when parsing env lists","Never split env strings without filtering empty segments","Validate workspace config before writing the spec"],"tags":["validation","fleet","environment"],"backgroundTag":"empty-required-field","analyzedSha":"73e0f67d83c59909b571efdfc88c4bc28c309cb1","analyzedAt":"2026-09-22T01:30:00.501Z","contentChangedAt":"2026-09-22T01:30:00.501Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}