wavetermdev/waveterm · error

error retrieving workspaceList: %w

Error message

error retrieving workspaceList: %w

What it means

Returned when the workspace list cannot be retrieved from the workspace store. The underlying error is wrapped with %w.

Source

Thrown at pkg/wcore/workspace.go:129

	if updated {
		wstore.DBUpdate(ctx, ws)
	}
	return ws, updated, nil
}

// If force is true, it will delete even if workspace is named.
// If workspace is empty, it will be deleted, even if it is named.
// Returns true if workspace was deleted, false if it was not deleted.
func DeleteWorkspace(ctx context.Context, workspaceId string, force bool) (bool, string, error) {
	log.Printf("DeleteWorkspace %s\n", workspaceId)
	workspace, err := wstore.DBMustGet[*waveobj.Workspace](ctx, workspaceId)
	if err != nil && wstore.ErrNotFound == err {
		return true, "", fmt.Errorf("workspace already deleted %w", err)
	}
	// @jalileh list needs to be saved early on i assume
	workspaces, err := ListWorkspaces(ctx)
	if err != nil {
		return false, "", fmt.Errorf("error retrieving workspaceList: %w", err)
	}

	if workspace.Name != "" && workspace.Icon != "" && !force && len(workspace.TabIds) > 0 {
		log.Printf("Ignoring DeleteWorkspace for workspace %s as it is named\n", workspaceId)
		return false, "", nil
	}

	for _, tabId := range workspace.TabIds {
		log.Printf("deleting tab %s\n", tabId)
		_, err := DeleteTab(ctx, workspaceId, tabId, false)
		if err != nil {
			return false, "", fmt.Errorf("error closing tab: %w", err)
		}
	}
	windowId, _ := wstore.DBFindWindowForWorkspaceId(ctx, workspaceId)
	err = wstore.DBDelete(ctx, waveobj.OType_Workspace, workspaceId)
	if err != nil {
		return false, "", fmt.Errorf("error deleting workspace: %w", err)

View on GitHub (pinned to a4447c1563)

Solutions

  1. Inspect the wrapped cause for the storage read error
  2. Check permissions/integrity of the Wave data directory
  3. Close other Wave instances holding the DB, then retry
Defensive patterns

Strategy: try-catch

Validate before calling

if _, err := wcore.ListWorkspaces(ctx); err != nil {
    return fmt.Errorf("store unavailable, cannot delete: %w", err)
}

Try / catch

deleted, _, err := wcore.DeleteWorkspace(ctx, wsId, force)
if err != nil {
    log.Printf("delete failed (store read): %v", err)
    return err
}

Prevention

When it happens

Trigger: Calling DeleteWorkspace / SwitchWorkspace / CloseWindow while ListWorkspaces errors out (store read failure, corrupted workspaceList record).

Common situations: Corrupted wave store, locked DB from a second running instance, IO errors on the data directory.

Related errors


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