{"record":{"id":"bc2a4944d9820292","repo":"windmill-labs/windmill","slug":"invalid-dedicated-workers-format-got-x-expects","errorCode":null,"errorMessage":"Invalid dedicated_workers format. Got {x}, expects <workspace_id>:<path>","messagePattern":"Invalid dedicated_workers format\\. Got (.+?), expects <workspace_id>:<path>","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"backend/windmill-common/src/worker.rs","lineNumber":2173,"sourceCode":"                let script_path = splitted[1];\n                Ok(WorkspacedPath {\n                    workspace_id: workspace.to_string(),\n                    path: script_path.to_string(),\n                })\n            }\n        })\n        .transpose()?;\n\n    // Parse dedicated_workers (multiple dedicated workers)\n    let dedicated_workers = config\n        .dedicated_workers\n        .map(|workers| {\n            workers\n                .into_iter()\n                .map(|x| {\n                    let splitted = x.split(':').to_owned().collect_vec();\n                    if splitted.len() != 2 {\n                        return Err(anyhow::anyhow!(\n                            \"Invalid dedicated_workers format. Got {x}, expects <workspace_id>:<path>\"\n                        ));\n                    }\n                    let workspace = splitted[0];\n                    let script_path = splitted[1];\n                    Ok(WorkspacedPath {\n                        workspace_id: workspace.to_string(),\n                        path: script_path.to_string(),\n                    })\n                })\n                .collect::<Result<Vec<_>, _>>()\n        })\n        .transpose()?;\n    if *WORKER_GROUP == \"default\" && dedicated_worker.is_none() {\n        let mut all_tags = config\n            .worker_tags\n            .unwrap_or_default()\n            .into_iter()","sourceCodeStart":2155,"sourceCodeEnd":2191,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/backend/windmill-common/src/worker.rs#L2155-L2191","documentation":"Same contract as dedicated_worker but for the dedicated_workers list: each entry must be '<workspace_id>:<path>' with exactly one colon. Any entry with a different number of colon-separated parts fails parsing.","triggerScenarios":"One of the entries in the dedicated_workers list contains extra colons (URL, port, version suffix) or no colon at all; list configured via env var where values are comma- or whitespace-split and one entry is malformed.","commonSituations":"Bulk-editing worker configs and one entry keeps a URL prefix; mixing formats across entries; documentation examples adapted incorrectly for multiple workers.","solutions":["Fix the offending list entry to '<workspace_id>:<path>' with exactly one colon","Validate every entry in the list individually — one bad entry rejects the whole list","Check the surrounding container/orchestrator config for mangled separators"],"exampleFix":"// before\ndedicated_workers = \"ws1:scripts/a, https://host/ws2:scripts/b\"\n// after\ndedicated_workers = \"ws1:scripts/a, ws2:scripts/b\"","handlingStrategy":"validation","validationCode":"for entry in list {\n    let parts: Vec<&str> = entry.split(':').collect();\n    assert_eq!(parts.len(), 2, \"dedicated_workers entry must be <workspace_id>:<path>: {}\", entry);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate every list entry — one malformed entry rejects all","Lint env vars for stray URLs/ports before worker startup","Keep the list format uniform across environments"],"tags":["config","worker","startup"],"backgroundTag":"invalid-config-format","analyzedSha":"e474e8803ce2ff5c2df09a58dab51d45f5c922ca","analyzedAt":"2026-09-03T12:38:19.024Z","contentChangedAt":"2026-09-03T12:38:19.024Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}