{"record":{"id":"f64ba33045436f3a","repo":"dagger/dagger","slug":"attach-module-self-dependency-q-dep-id-w","errorCode":null,"errorMessage":"attach module self dependency %q: dep ID: %w","messagePattern":"attach module self dependency %q: dep ID: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"core/module.go","lineNumber":983,"sourceCode":"\t\t\treturn nil, fmt.Errorf(\"attach module self dependency: missing module deps\")\n\t\t}\n\t\tattachedSelf, ok := self.(dagql.ObjectResult[*Module])\n\t\tif !ok {\n\t\t\treturn nil, fmt.Errorf(\"attach module self dependency: expected attached module result, got %T\", self)\n\t\t}\n\t\tattachedSelfID, err := attachedSelf.ID()\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"attach module self dependency: self ID: %w\", err)\n\t\t}\n\t\tseenSelf := false\n\t\tfor i, dep := range mod.Deps.entries {\n\t\t\tdepInst := dep.mod.ModuleResult()\n\t\t\tif depInst.Self() == nil {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tdepID, err := depInst.ID()\n\t\t\tif err != nil {\n\t\t\t\treturn nil, fmt.Errorf(\"attach module self dependency %q: dep ID: %w\", dep.mod.Name(), err)\n\t\t\t}\n\t\t\tif depID == nil || depID.EngineResultID() != attachedSelfID.EngineResultID() {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tmod.Deps.entries[i].mod = NewUserMod(attachedSelf)\n\t\t\tseenSelf = true\n\t\t\tbreak\n\t\t}\n\t\tif !seenSelf {\n\t\t\tmod.Deps = mod.Deps.Append(NewUserMod(attachedSelf))\n\t\t}\n\t}\n\treturn owned, nil\n}\n\ntype persistedModulePayload struct {\n\tSourceResultID                uint64                          `json:\"sourceResultID,omitempty\"`\n\tContextSourceResultID         uint64                          `json:\"contextSourceResultID,omitempty\"`","sourceCodeStart":965,"sourceCodeEnd":1001,"githubUrl":"https://github.com/dagger/dagger/blob/82ba2681dbe30d3547a1dc50ea495900ab5b6047/core/module.go#L965-L1001","documentation":"While attaching dependency results, each dependency module's dagql ID is fetched to compare its EngineResultID with the attached self module's. This error wraps the failure to get the ID of a dependency module instance, reported with the dependency module's name (%q).","triggerScenarios":"AttachDependencyResults iterates mod.Deps and calls depInst.ID() on a dependency module whose Self() is non-nil; that ID() call fails, e.g. because the dependency's ModuleResult is not properly registered with the dagql server.","commonSituations":"A module declares a dependency on another local module whose instance was constructed outside the current dagql session; stale or broken module caches after engine restarts.","solutions":["Read the wrapped error and the dependency name in the message to identify the broken dep","Re-resolve the dependency module through the live dagql session instead of caching ModuleResult","Re-run the module installation (dagger mod use) to refresh dependency instances","Check that the dependency's Self() result is attached to the same server as self"],"exampleFix":"// before\nvar cachedDep *Module // stale, ID() fails\n// after\ndepRes, err := dagql.NewModule(dag, depSource).Evaluate(ctx) // fresh result\nif err != nil { return err }","handlingStrategy":"try-catch","validationCode":"for _, dep := range mod.Deps.entries {\n  if inst := dep.mod.ModuleResult(); inst.Self() != nil {\n    if _, err := inst.ID(); err != nil { return fmt.Errorf(\"dep %q unresolvable: %w\", dep.mod.Name(), err) }\n  }\n}","typeGuard":"func depResolvable(dep *ModuleDep) bool { inst := dep.mod.ModuleResult(); return inst == nil || inst.Self() == nil || validID(inst) }","tryCatchPattern":"res, err := mod.AttachDependencyResults(ctx, self)\nif err != nil {\n  var name string\n  if m := depNameRe.FindStringSubmatch(err.Error()); m != nil { name = m[1] }\n  return fmt.Errorf(\"re-install dependency %q: %w\", name, err)\n}","preventionTips":["Re-resolve dependency ModuleResults from the current session before attaching","Re-run dagger mod use after dependency changes","Avoid mixing results from multiple dagql servers"],"tags":["dagql","module-dependencies","id-resolution"],"backgroundTag":"dagql-id-resolution-failed","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"}