{"record":{"id":"61af02d658334c26","repo":"dagger/dagger","slug":"engine-volume-name-must-not-be-empty","errorCode":null,"errorMessage":"engine volume name must not be empty","messagePattern":"engine volume name must not be empty","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/volume.go","lineNumber":81,"sourceCode":"\treturn &ast.Type{\n\t\tNamedType: \"Volume\",\n\t\tNonNull:   true,\n\t}\n}\n\nfunc (*Volume) TypeDescription() string {\n\treturn \"A filesystem volume that can be mounted into containers.\"\n}\n\n// VolumeContentDigestFromCacheKey returns opt-in cache equivalence evidence.\n// It is deliberately not a session-resource handle.\nfunc VolumeContentDigestFromCacheKey(cacheKey string) digest.Digest {\n\treturn hashutil.HashStrings(cacheKey)\n}\n\nfunc ValidateEngineVolumeName(name string) error {\n\tif name == \"\" {\n\t\treturn fmt.Errorf(\"engine volume name must not be empty\")\n\t}\n\tif len(name) > engineVolumeMaxPathLength {\n\t\treturn fmt.Errorf(\"engine volume name must not exceed %d bytes\", engineVolumeMaxPathLength)\n\t}\n\tfor _, component := range strings.Split(name, \"/\") {\n\t\tif component == \"\" {\n\t\t\treturn fmt.Errorf(\"engine volume name must use non-empty slash-separated components\")\n\t\t}\n\t\tif len(component) > engineVolumeMaxNameLength {\n\t\t\treturn fmt.Errorf(\"engine volume name component %q must not exceed %d bytes\", component, engineVolumeMaxNameLength)\n\t\t}\n\t\tif component == \"fs\" {\n\t\t\treturn fmt.Errorf(\"engine volume name component %q is reserved\", component)\n\t\t}\n\t\tfor i := range len(component) {\n\t\t\tchar := component[i]\n\t\t\tvalid := char >= 'A' && char <= 'Z' || char >= 'a' && char <= 'z' || char >= '0' && char <= '9'\n\t\t\tif i > 0 {","sourceCodeStart":63,"sourceCodeEnd":99,"githubUrl":"https://github.com/dagger/dagger/blob/82ba2681dbe30d3547a1dc50ea495900ab5b6047/core/volume.go#L63-L99","documentation":"ValidateEngineVolumeName rejected an engine volume address because the name portion is the empty string. This is a validation guard: every engine volume reference must carry a non-empty name before it can be parsed into an engine volume ID or config.","triggerScenarios":"Thrown at core/volume.go:81 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Provide a non-empty volume name","Check for an unset name variable defaulting to \"\" in the pipeline"],"exampleFix":null,"handlingStrategy":"validation","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"82ba2681dbe30d3547a1dc50ea495900ab5b6047","analyzedAt":"2026-09-05T07:21:37.930Z","contentChangedAt":"2026-09-05T07:21:37.930Z","schemaVersion":2},"datasetVersion":"2026-09-12T12:17:11.808Z"}