dagger/dagger · error

failed to resolve canonical typedef for arg %q: %w

Error message

failed to resolve canonical typedef for arg %q: %w

What it means

Raised in Function.FieldSpec (core/typedef.go:257). After obtaining a module type (modType), calling its TypeDef(ctx) to get the canonical TypeDef failed. This wraps the underlying error, prefixed with the argument name.

Source

Thrown at core/typedef.go:257

	}
	spec.Module = module
	if fn.SourceMap.Valid && fn.SourceMap.Value.Self() != nil {
		spec.Directives = append(spec.Directives, fn.SourceMap.Value.Self().TypeDirective())
	}
	spec.Directives = append(spec.Directives, fn.Directives()...)
	for _, arg := range fn.Args {
		argSelf := arg.Self()
		modType, ok, err := mod.ModTypeFor(ctx, argSelf.TypeDef.Self(), true)
		if err != nil {
			return spec, fmt.Errorf("failed to get typedef for arg %q: %w", argSelf.Name, err)
		}
		if !ok {
			return spec, fmt.Errorf("failed to get typedef for arg %q", argSelf.Name)
		}

		argTypeDef, err := modType.TypeDef(ctx)
		if err != nil {
			return spec, fmt.Errorf("failed to resolve canonical typedef for arg %q: %w", argSelf.Name, err)
		}

		input := argTypeDef.Self().ToInput()
		var defaultVal dagql.Input
		if argSelf.DefaultValue != nil {
			var val any
			dec := json.NewDecoder(bytes.NewReader(argSelf.DefaultValue.Bytes()))
			dec.UseNumber()
			if err := dec.Decode(&val); err != nil {
				return spec, fmt.Errorf("failed to decode default value for arg %q: %w", argSelf.Name, err)
			}

			var err error
			defaultVal, err = input.Decoder().DecodeInput(val)
			if err != nil {
				return spec, fmt.Errorf("failed to decode dagql default value for arg %q: %w", argSelf.Name, err)
			}
		}

View on GitHub (pinned to 82ba2681db)

Solutions

  1. Read the wrapped error for the root cause
  2. Re-sync module dependencies (dagger mod sync / dagger develop)
  3. Check the dependency module loads standalone (dagger functions in that module)
  4. Clear engine cache if stale state persists (dagger engine prune)
Defensive patterns

Strategy: try-catch

Validate before calling

// verify the dependency module loads before calling functions with its types
_, err := dag.Module(ctx, "other-module")
if err != nil { /* resolve module first */ }

Try / catch

spec, err := fn.FieldSpec(ctx, mod)
if err != nil {
    var inner error
    if errors.As(err, &inner) {
        log.Printf("root cause: %v", inner)
    }
    return err
}

Prevention

When it happens

Trigger: modType.TypeDef(ctx) errors during schema construction, typically when the module type's definition lazily resolves to something unavailable (dependent module's type graph not loaded/corrupt).

Common situations: Dependency module's functions referenced as argument types while that module fails to load; engine cache corruption after upgrade; circular module references.

Related errors


AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05). Data as JSON: /api/errors/b522a4ce6debdd38. Report an issue: GitHub.