dagger/dagger · error

resolve session socket %q: empty session ID

Error message

resolve session socket %q: empty session ID

What it means

ResolveSessionSocket found client metadata but its SessionID is empty, so the socket handle cannot be keyed to a session for lookup. The request carries a malformed/partial session identity rather than a missing one — a guard against resolving a session socket under an anonymous context.

Source

Thrown at core/socket.go:107

		PortForwardVal: persisted.PortForward,
	}, nil
}

//nolint:dupl // symmetric with resolveSessionSecret; sharing hides Socket vs Secret semantics
func ResolveSessionSocket(ctx context.Context, socket *Socket) (*Socket, error) {
	if socket == nil {
		return nil, nil
	}
	if socket.Handle == "" {
		return socket, nil
	}

	clientMetadata, err := engine.ClientMetadataFromContext(ctx)
	if err != nil {
		return nil, fmt.Errorf("resolve session socket %q: current client metadata: %w", socket.Handle, err)
	}
	if clientMetadata.SessionID == "" {
		return nil, fmt.Errorf("resolve session socket %q: empty session ID", socket.Handle)
	}
	cache, err := dagql.EngineCache(ctx)
	if err != nil {
		return nil, fmt.Errorf("resolve session socket %q: current dagql cache: %w", socket.Handle, err)
	}
	resolvedAny, err := cache.ResolveSessionResource(ctx, clientMetadata.SessionID, clientMetadata.ClientID, socket.Handle)
	if err != nil {
		return nil, err
	}
	resolved, ok := resolvedAny.(*Socket)
	if !ok {
		return nil, fmt.Errorf("resolve session socket %q: bound value is %T", socket.Handle, resolvedAny)
	}
	if resolved.Handle != "" {
		return nil, fmt.Errorf("resolve session socket %q: bound socket is still a handle", socket.Handle)
	}
	return resolved, nil
}

View on GitHub (pinned to 82ba2681db)

Solutions

  1. Ensure the client establishes a real session (SessionID set) before using host sockets
  2. Re-run the call from a properly initialized CLI/session context
  3. Check for middleware or custom API clients that strip the session ID from metadata
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at core/socket.go:107 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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