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

  1. Re-run the pipeline with a current, matched dagger CLI and freshly regenerated (`dagger develop`) module
  2. Ensure the parent object is still valid (re-create it in the same session rather than reusing stale IDs)
  3. Check engine logs for the underlying GraphQL error behind the %w wrap
  4. 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

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.