dagger/dagger · error
source socket is nil
Error message
source socket is nil
What it means
After loading the Source socket argument, sshAuthSocket unwraps it to *core.Socket with dagql.UnwrapAs. This error means the loaded value decoded successfully but is not a *core.Socket (or unwrapped to nil), so there is no concrete socket to work with.
Source
Thrown at core/schema/host.go:479
cache, err := dagql.EngineCache(ctx)
if err != nil {
return inst, fmt.Errorf("failed to get dagql cache: %w", err)
}
clientMetadata, err := engine.ClientMetadataFromContext(ctx)
if err != nil {
return inst, fmt.Errorf("failed to get client metadata: %w", err)
}
var concreteSelf *core.Socket
if args.Source.Valid {
concrete, err := args.Source.Value.Load(ctx, srv)
if err != nil {
return inst, fmt.Errorf("failed to load source socket: %w", err)
}
concreteSelf, _ = dagql.UnwrapAs[*core.Socket](concrete)
if concreteSelf == nil {
return inst, errors.New("source socket is nil")
}
concreteSelf, err = core.ResolveSessionSocket(ctx, concreteSelf)
if err != nil {
return inst, fmt.Errorf("failed to resolve source socket: %w", err)
}
if concreteSelf == nil {
return inst, errors.New("resolved source socket is nil")
}
} else {
if clientMetadata.SSHAuthSocketPath == "" {
return inst, errors.New("SSH_AUTH_SOCK is not set")
}
concreteVal := &core.Socket{
Kind: core.SocketKindUnixOpaque,
URLVal: (&url.URL{Scheme: "unix", Path: clientMetadata.SSHAuthSocketPath}).String(),
SourceClientID: clientMetadata.ClientID,
}
concreteSelf = concreteValView on GitHub (pinned to 82ba2681db)
Solutions
- Ensure the Source argument is genuinely a Host socket reference (e.g. from host.unixSocket or a prior sshAuthSocket call), not another type
- Regenerate the client/upgrade SDK so socket IDs match the engine's concrete type
- Check that the ID was not manually constructed
Defensive patterns
Strategy: type-guard
Validate before calling
if !isSocketRef(src) { return errors.New("source must be a Socket") } Type guard
func isSocketRef(v dagql.Typed) bool {
_, ok := dagql.UnwrapAs[*core.Socket](v)
return ok
} Try / catch
if err != nil && strings.Contains(err.Error(), "source socket is nil") {
// passed a non-socket object; pass a genuine Host socket instead
} Prevention
- Only pass objects obtained from host.unixSocket or sshAuthSocket as Source
- Don't substitute other typed objects (secret/service/directory) for sockets
- Regenerate clients after engine upgrades
When it happens
Trigger: Passing a Source object that is a Socket instance but whose underlying value fails to unwrap as *core.Socket — e.g. an ID that resolves to a different concrete type or a nil payload.
Common situations: Mixing object kinds (passing a secret, service, or directory ID where a socket is expected); engine/SDK version skew changing the socket concrete type.
Related errors
- attach container socket %q: unexpected result %T
- failed to mount SSH socket: %w
- failed to load source socket: %w
- failed to resolve source socket: %w
- resolved source socket is nil
AI-assisted analysis of dagger/dagger@82ba2681db (2026-09-05).
Data as JSON: /api/errors/f83f2aca36ad7990.
Report an issue: GitHub.