wavetermdev/waveterm · error
error inserting window: %w
Error message
error inserting window: %w
What it means
CreateWindow builds a new waveobj.Window and inserts it via wstore.DBInsert; this error wraps the insert failure. The workspace may have already been created (and is then orphaned), since the insert happens after workspace setup.
Source
Thrown at pkg/wcore/window.go:116
if winSize == nil {
winSize = &waveobj.WinSize{
Width: 0,
Height: 0,
}
}
window := &waveobj.Window{
OID: windowId,
WorkspaceId: ws.OID,
IsNew: true,
Pos: waveobj.Point{
X: 0,
Y: 0,
},
WinSize: *winSize,
}
err := wstore.DBInsert(ctx, window)
if err != nil {
return nil, fmt.Errorf("error inserting window: %w", err)
}
client, err := GetClientData(ctx)
if err != nil {
return nil, fmt.Errorf("error getting client: %w", err)
}
client.WindowIds = append(client.WindowIds, windowId)
err = wstore.DBUpdate(ctx, client)
if err != nil {
return nil, fmt.Errorf("error updating client: %w", err)
}
return GetWindow(ctx, windowId)
}
// CloseWindow closes a window and deletes its workspace if it is empty and not named.
// If fromElectron is true, it does not send an event to Electron.
func CloseWindow(ctx context.Context, windowId string, fromElectron bool) error {
log.Printf("CloseWindow %s\n", windowId)
window, err := GetWindow(ctx, windowId)View on GitHub (pinned to a4447c1563)
Solutions
- Check the wrapped %w error for the root insert failure
- Verify free disk space and write permissions on the waveterm state directory
- After a version upgrade, check for schema-migration issues in the DB
- Retry CreateWindow; note any workspace created in step 1 may need cleanup
Example fix
// before
err := wstore.DBInsert(ctx, window)
if err != nil {
return nil, fmt.Errorf("error inserting window: %w", err)
}
// after
if err := wstore.DBInsert(ctx, window); err != nil {
_ = DeleteWorkspace(ctx, ws.OID, false) // don't orphan the fresh workspace
return nil, fmt.Errorf("error inserting window: %w", err)
} Defensive patterns
Strategy: retry
Validate before calling
if err := checkDiskSpace(waveStateDir); err != nil {
return fmt.Errorf("insufficient disk space before window creation: %w", err)
} Try / catch
win, err := wcore.CreateWindow(ctx, winSize, workspaceId)
if err != nil && strings.Contains(err.Error(), "error inserting window") {
if isTransient(err) {
time.Sleep(time.Second)
win, err = wcore.CreateWindow(ctx, winSize, workspaceId)
}
if err != nil {
return err
}
} Prevention
- Monitor disk space on the waveterm state directory
- Run schema migrations when upgrading Wave Terminal versions
- Detect and clean up orphaned workspaces after failed inserts
When it happens
Trigger: wcore.CreateWindow(ctx, winSize, workspaceId) where DBInsert(ctx, window) fails — duplicate OID (astronomically unlikely with uuid.NewString), DB closed/corrupted, validation failure in wstore for the Window object.
Common situations: Disk full or read-only state directory; DB corruption from a crashed write; wstore schema mismatch after a Wave Terminal version upgrade changed the Window object format.
Related errors
- error updating window: %w
- error creating workspace: %w
- error deleting window: %w
- error updating client: %w
- error inserting client: %w
AI-assisted analysis of wavetermdev/waveterm@a4447c1563 (2026-09-01).
Data as JSON: /api/errors/6539c4a265a505d2.
Report an issue: GitHub.