dagger/dagger · error
get fn parent: %w
Error message
get fn parent: %w
What it means
Generated-module runtime error: dispatch() failed to fetch the serialized parent object (JSON) via fnCall.Parent(ctx). The parent JSON is required to deserialize the receiver the user's method is called on; if the engine query errors, dispatch wraps it as 'get fn parent' and returns it to the engine.
Source
Thrown at cmd/codegen/generator/go/templates/modules.go:269
defer func() {
if rerr != nil {
if ` + voidRet + ` := fnCall.ReturnError(ctx, convertError(rerr)); err != nil {
fmt.Println("failed to return error:", err, "\noriginal error:", rerr)
}
}
}()
parentName, err := fnCall.ParentName(ctx)
if err != nil {
return fmt.Errorf("get parent name: %w", err)
}
fnName, err := fnCall.Name(ctx)
if err != nil {
return fmt.Errorf("get fn name: %w", err)
}
parentJson, err := fnCall.Parent(ctx)
if err != nil {
return fmt.Errorf("get fn parent: %w", err)
}
fnArgs, err := fnCall.InputArgs(ctx)
if err != nil {
return fmt.Errorf("get fn args: %w", err)
}
inputArgs := map[string][]byte{}
for _, fnArg := range fnArgs {
argName, err := fnArg.Name(ctx)
if err != nil {
return fmt.Errorf("get fn arg name: %w", err)
}
argValue, err := fnArg.Value(ctx)
if err != nil {
return fmt.Errorf("get fn arg value: %w", err)
}
inputArgs[argName] = []byte(argValue)
}View on GitHub (pinned to 82ba2681db)
Solutions
- Re-run the pipeline with a current, matched dagger CLI and freshly regenerated (`dagger develop`) module
- Ensure the parent object is still valid (re-create it in the same session rather than reusing stale IDs)
- Check engine logs for the underlying GraphQL error behind the %w wrap
- Restart the engine if the session state was corrupted
Example fix
// before $ dagger call old-step --reuse-parent # stale parent ID from previous engine // after $ dagger call build && dagger call serve # fresh objects in one session
Defensive patterns
Strategy: fallback
Validate before calling
// avoid stale parent objects: recreate chains in a single session
// parent, err := dag.Container().From("alpine").ID(ctx) // fresh ID before each call Try / catch
res, err := step.Serve(ctx)
if err != nil && strings.Contains(err.Error(), "get fn parent") {
// rebuild parent object and retry once
return rebuildParentAndRetry(ctx)
} Prevention
- Do not reuse object IDs across engine restarts or CLI upgrades
- Keep multi-step pipelines in one dagger session
- Match CLI/SDK versions and regenerate with `dagger develop`
When it happens
Trigger: Function call where the engine cannot provide the parent object JSON — parent failed to serialize in the engine, session/connection dropped between ParentName/Name and Parent queries, or SDK/engine schema mismatch.
Common situations: Chained calls where the parent object's ID became invalid; engine restart mid-pipeline; calling a function on an object produced by a different module version; CLI/SDK skew after upgrade.
Related errors
AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05).
Data as JSON: /api/errors/e9aa1dcb704d0fc3.
Report an issue: GitHub.