wavetermdev/waveterm · error

not connected: %s

Error message

not connected: %s

What it means

For WSL connections (connName prefixed with wsl://), CheckConnStatus derives the live connection status via GetWslConn(distroName).DeriveConnStatus(). This error is returned when the derived status is anything other than Status_Connected, reporting the actual status string.

Source

Thrown at pkg/blockcontroller/blockcontroller.go:440

	blocklogger.Infof(ctx, "[conndebug] "+fmtStr, args...)
	log.Printf(fmtStr, args...)
}

func CheckConnStatus(blockId string) error {
	bdata, err := wstore.DBMustGet[*waveobj.Block](context.Background(), blockId)
	if err != nil {
		return fmt.Errorf("error getting block: %w", err)
	}
	connName := bdata.Meta.GetString(waveobj.MetaKey_Connection, "")
	if conncontroller.IsLocalConnName(connName) {
		return nil
	}
	if strings.HasPrefix(connName, "wsl://") {
		distroName := strings.TrimPrefix(connName, "wsl://")
		conn := wslconn.GetWslConn(distroName)
		connStatus := conn.DeriveConnStatus()
		if connStatus.Status != conncontroller.Status_Connected {
			return fmt.Errorf("not connected: %s", connStatus.Status)
		}
		return nil
	}
	opts, err := remote.ParseOpts(connName)
	if err != nil {
		return fmt.Errorf("error parsing connection name: %w", err)
	}
	conn := conncontroller.MaybeGetConn(opts)
	if conn == nil {
		return fmt.Errorf("no connection found")
	}
	connStatus := conn.DeriveConnStatus()
	if connStatus.Status != conncontroller.Status_Connected {
		return fmt.Errorf("not connected: %s", connStatus.Status)
	}
	return nil
}

View on GitHub (pinned to a4447c1563)

Solutions

  1. Run `wsl --list --verbose` to confirm the distro exists and is running
  2. Start the distro manually (`wsl -d <distro>`) or restart the WSL service (`wsl --shutdown` then reconnect)
  3. Verify the meta connection value matches an installed distro name (wsl://<distroName>)
  4. Retry the connection; the client usually auto-reconnects once WSL is up

Example fix

// before
connName := "wsl://MyDistro"
// after (verify distro exists first)
out, _ := exec.Command("wsl", "-l", "-q").Output()
if !strings.Contains(string(out), "MyDistro") {
    connName = "wsl://Ubuntu" // fall back to an installed distro
}
Defensive patterns

Strategy: retry

Validate before calling

conn := wslconn.GetWslConn(strings.TrimPrefix(connName, "wsl://"))
st := conn.DeriveConnStatus()
if st.Status != conncontroller.Status_Connected { /* wait/retry */ }

Try / catch

err := blockcontroller.CheckConnStatus(blockId)
if err != nil && strings.HasPrefix(err.Error(), "not connected:") {
    // surface reconnect UI or retry with backoff
}

Prevention

When it happens

Trigger: WSL distro not started, wsl.exe unavailable or slow to start, distro name invalid/removed, WSL service shutdown while the block's connection status is polled.

Common situations: Machine resumed from sleep with WSL VM torn down; distro uninstalled while blocks referencing it are open; first connection to a distro still initializing; `wsl --shutdown` issued externally.

Related errors


AI-assisted analysis of wavetermdev/waveterm@a4447c1563 (2026-09-01). Data as JSON: /api/errors/7f0785dbeabf0627. Report an issue: GitHub.