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
- Inspect the wrapped cause for the storage read error
- Check permissions/integrity of the Wave data directory
- 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
- Verify the wave store is readable before workspace operations
- Avoid multiple concurrent Wave instances on one data dir
- Watch for disk I/O errors in system logs
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
- error getting tab: %w
- error getting tab blocks: %w
- error inserting workspace: %w
- error getting client: %v
- error getting tab: %w
AI-assisted analysis of wavetermdev/waveterm@a4447c1563 (2026-09-01).
Data as JSON: /api/errors/6000822c0194be3c.
Report an issue: GitHub.