{"record":{"id":"c93a2e4219c8e1c2","repo":"windmill-labs/windmill","slug":"invalid-dedicated-worker-format-got-x-expects","errorCode":null,"errorMessage":"Invalid dedicated_worker format. Got {x}, expects <workspace_id>:<path>","messagePattern":"Invalid dedicated_worker format\\. Got (.+?), expects <workspace_id>:<path>","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"critical","filePath":"backend/windmill-common/src/worker.rs","lineNumber":2150,"sourceCode":"            tracing::info!(\n                \"DEDICATED_WORKER set from env variable: {}\",\n                dw.as_ref().unwrap()\n            );\n            config.dedicated_worker = dw;\n        }\n    } else {\n        tracing::info!(\n            \"DEDICATED_WORKER set from config: {}\",\n            config.dedicated_worker.as_ref().unwrap()\n        );\n    }\n    let dedicated_worker = config\n        .dedicated_worker\n        .map(|x| {\n            let splitted = x.split(':').to_owned().collect_vec();\n            if splitted.len() != 2 {\n                killpill_tx.send();\n                return Err(anyhow::anyhow!(\n                    \"Invalid dedicated_worker format. Got {x}, expects <workspace_id>:<path>\"\n                ));\n            } else {\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        })\n        .transpose()?;\n\n    // Parse dedicated_workers (multiple dedicated workers)\n    let dedicated_workers = config\n        .dedicated_workers\n        .map(|workers| {\n            workers","sourceCodeStart":2132,"sourceCodeEnd":2168,"githubUrl":"https://github.com/windmill-labs/windmill/blob/e474e8803ce2ff5c2df09a58dab51d45f5c922ca/backend/windmill-common/src/worker.rs#L2132-L2168","documentation":"The dedicated_worker configuration option must be exactly '<workspace_id>:<path>' — a single colon separating workspace and script path. The worker parses it by splitting on ':' and requires exactly 2 parts; anything else is fatal and the worker sends a kill signal via killpill_tx.","triggerScenarios":"Setting the dedicated_worker env/config value to a path containing an extra colon (e.g. 'workspace_u:script/foo:v2'), forgetting the colon entirely, or passing a full URL like 'https://...:workspace:path'.","commonSituations":"Typos in the deployment config; copy-pasting a path that includes a scheme or port; Kubernetes/Helm values where the string got mangled by templating.","solutions":["Fix the config value to exactly '<workspace_id>:<path>' with a single colon and no extra ':' characters","Remove any URL scheme, port, or trailing segments from the value","Restart the worker after fixing the config (the worker kills itself on this error)"],"exampleFix":"// before\ndedicated_worker = \"https://app.windmill.dev:scripts/etl:daily\"\n// after\ndedicated_worker = \"workspace_u:scripts/etl/daily\"","handlingStrategy":"validation","validationCode":"let parts: Vec<&str> = value.split(':').collect();\nif parts.len() != 2 {\n    panic!(\"dedicated_worker must be <workspace_id>:<path>, got: {}\", value);\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep script paths free of ':' characters","Validate config in CI before deploying workers","Copy examples verbatim from docs rather than adapting URLs"],"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"}