dagger/dagger · error

result call frame %q implicit inputs: %w

Error message

result call frame %q implicit inputs: %w

What it means

Thrown by structuralSelfDigestAndInputRefs in dagql/result_call_frame.go:963 (only when includeImplicitInputs is true). While hashing frame.ImplicitInputs via appendResultCallArgSelfRefs, an implicit input failed to resolve/validate; the error is wrapped as 'result call frame %q implicit inputs: %w' and aborts the self digest and its structural input refs.

Source

Thrown at dagql/result_call_frame.go:963

		}
		h = nextH
		inputRefs = nextInputRefs
		h = h.WithDelim()
	}
	h = h.WithDelim()

	if includeImplicitInputs {
		for _, input := range frame.ImplicitInputs {
			input = redactedCallArgForDigest(input)
			if input == nil {
				continue
			}
			nextH, nextInputRefs, err := appendResultCallArgSelfRefs(c, input, h, inputRefs)
			if err != nil {
				if h != nil {
					h.Close()
				}
				return "", nil, fmt.Errorf("result call frame %q implicit inputs: %w", field, err)
			}
			h = nextH
			inputRefs = nextInputRefs
			h = h.WithDelim()
		}
	}

	if frame.Module != nil {
		if frame.Module.ResultRef == nil {
			if h != nil {
				h.Close()
			}
			return "", nil, fmt.Errorf("result call frame %q module: missing result ref", field)
		}
		inputRefs = append(inputRefs, ResultCallStructuralInputRef{
			Result: frame.Module.ResultRef,
		})
	}

View on GitHub (pinned to 82ba2681db)

Solutions

  1. Follow the wrapped error to the failing implicit input and fix or remove it from the frame.
  2. Ensure all implicit-input results are present in the session cache before computing the self digest.
  3. Validate implicit input refs (ref.Validate()) beforehand.
  4. Rebuild the frame via a live engine call instead of deserializing stale frames.

Example fix

// before
dig, refs, err := frame.SelfDigestAndInputRefs(ctx) // "container.withEnvVariable" implicit inputs: ...

// after
for _, in := range frame.ImplicitInputs {
    if in.Value.Ref != nil && in.Value.Ref.Validate() != nil {
        return fmt.Errorf("implicit input %q unresolvable; re-run the call", in.Name)
    }
}
dig, refs, err := frame.SelfDigestAndInputRefs(ctx)
Defensive patterns

Strategy: validation

Validate before calling

for _, in := range frame.ImplicitInputs {
    if in.Value != nil && in.Value.Ref != nil {
        if err := in.Value.Ref.Validate(); err != nil {
            return fmt.Errorf("implicit input %q unresolvable: %w", in.Name, err)
        }
    }
}

Type guard

func implicitInputsSelfRefSafe(frame *dagql.ResultCall) bool {
    for _, in := range frame.ImplicitInputs {
        if in.Value != nil && in.Value.Ref != nil && in.Value.Ref.Validate() != nil {
            return false
        }
    }
    return true
}

Try / catch

dig, refs, err := frame.SelfDigestAndInputRefs(ctx)
if err != nil && strings.Contains(err.Error(), "implicit inputs:") {
    // re-run the original call to regenerate implicit inputs, then retry
}

Prevention

When it happens

Trigger: SelfDigestAndInputRefs on a frame whose ImplicitInputs reference results that fail ref validation or are absent from the engine cache.

Common situations: Implicit inputs (env vars, platform, secrets) whose backing frames were never materialized in this session; stale or partially restored serialized sessions; hand-built frames with dangling implicit input refs.

Related errors


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