wavetermdev/waveterm · error

error creating block: %w

Error message

error creating block: %w

What it means

This wraps failures from createBlockObj, which persists the new Block object under the given tab in a store transaction. The %w-wrapped inner error carries the actual reason (tab missing, DB failure, etc.).

Source

Thrown at pkg/wcore/block.go:86

	defer func() {
		if rtnErr == nil {
			return
		}
		// if there was an error, and we created the block, clean it up since the function failed
		if blockCreated && newBlockOID != "" {
			deleteBlockObj(ctx, newBlockOID)
			filestore.WFS.DeleteZone(ctx, newBlockOID)
		}
	}()
	if blockDef == nil {
		return nil, fmt.Errorf("blockDef is nil")
	}
	if blockDef.Meta == nil || blockDef.Meta.GetString(waveobj.MetaKey_View, "") == "" {
		return nil, fmt.Errorf("no view provided for new block")
	}
	blockData, err := createBlockObj(ctx, tabId, blockDef, rtOpts)
	if err != nil {
		return nil, fmt.Errorf("error creating block: %w", err)
	}
	blockCreated = true
	newBlockOID = blockData.OID
	// upload the files if present
	if len(blockDef.Files) > 0 {
		for fileName, fileDef := range blockDef.Files {
			err := filestore.WFS.MakeFile(ctx, newBlockOID, fileName, fileDef.Meta, wshrpc.FileOpts{})
			if err != nil {
				return nil, fmt.Errorf("error making blockfile %q: %w", fileName, err)
			}
			err = filestore.WFS.WriteFile(ctx, newBlockOID, fileName, []byte(fileDef.Content))
			if err != nil {
				return nil, fmt.Errorf("error writing blockfile %q: %w", fileName, err)
			}
		}
	}
	if recordTelemetry {
		blockView := blockDef.Meta.GetString(waveobj.MetaKey_View, "")

View on GitHub (pinned to a4447c1563)

Solutions

  1. Read the wrapped inner error for the root cause
  2. Verify tabId refers to an existing tab (re-fetch if the UI may have closed it)
  3. Retry after fixing DB-level issues (locks, disk space)
Defensive patterns

Strategy: try-catch

Validate before calling

tab, _ := wstore.DBGet[*waveobj.Tab](ctx, tabId)
if tab == nil { return errors.New("tab missing, aborting block creation") }

Try / catch

block, err := wcore.CreateBlock(ctx, tabId, blockDef, rtOpts)
if err != nil {
    if strings.Contains(err.Error(), "error creating block") {
        // unwrap/log inner cause, optionally retry
    }
}

Prevention

When it happens

Trigger: CreateBlockWithTelemetry called with valid blockDef but createBlockObj fails: nonexistent tabId, database/transaction error, or invalid runtime options.

Common situations: Creating a block against a tab that was just closed; SQLite lock or corruption; invalid RtOpts values rejected during persistence.

Related errors


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