wavetermdev/waveterm · error

error parsing object reference: %w

Error message

error parsing object reference: %w

What it means

UpdateObjectMeta wraps parseORef failures with 'error parsing object reference: %w'. The orefStr argument was not a valid 'type:oid' reference (see parseORef: must split on ':' into exactly 2 fields), so meta update never started. The inner error is 'invalid object reference: %q'.

Source

Thrown at pkg/service/objectservice/objectservice.go:127

	if err != nil {
		return nil, fmt.Errorf("error deleting block: %w", err)
	}
	return waveobj.ContextGetUpdatesRtn(ctx), nil
}

func (svc *ObjectService) UpdateObjectMeta_Meta() tsgenmeta.MethodMeta {
	return tsgenmeta.MethodMeta{
		ArgNames: []string{"uiContext", "oref", "meta"},
	}
}

func (svc *ObjectService) UpdateObjectMeta(uiContext waveobj.UIContext, orefStr string, meta waveobj.MetaMapType) (waveobj.UpdatesRtnType, error) {
	ctx, cancelFn := context.WithTimeout(context.Background(), DefaultTimeout)
	defer cancelFn()
	ctx = waveobj.ContextWithUpdates(ctx)
	oref, err := parseORef(orefStr)
	if err != nil {
		return nil, fmt.Errorf("error parsing object reference: %w", err)
	}
	err = wstore.UpdateObjectMeta(ctx, *oref, meta, false)
	if err != nil {
		return nil, fmt.Errorf("error updating %q meta: %w", orefStr, err)
	}
	return waveobj.ContextGetUpdatesRtn(ctx), nil
}

func (svc *ObjectService) UpdateObject_Meta() tsgenmeta.MethodMeta {
	return tsgenmeta.MethodMeta{
		ArgNames: []string{"uiContext", "waveObj", "returnUpdates"},
	}
}

func (svc *ObjectService) UpdateObject(uiContext waveobj.UIContext, waveObj waveobj.WaveObj, returnUpdates bool) (waveobj.UpdatesRtnType, error) {
	ctx, cancelFn := context.WithTimeout(context.Background(), DefaultTimeout)
	defer cancelFn()
	ctx = waveobj.ContextWithUpdates(ctx)

View on GitHub (pinned to a4447c1563)

Solutions

  1. Pass exactly 'type:oid' (e.g. 'block:B123') with a single ':'
  2. Validate the format with a split(':') check before the call
  3. Generate the ref with waveobj ORef string helpers instead of concatenation

Example fix

// before
svc.UpdateObjectMeta(uiContext, blockId, meta)
// after
orefStr := (waveobj.ORef{OType: waveobj.OType_Block, OID: blockId}).String()
svc.UpdateObjectMeta(uiContext, orefStr, meta)
Defensive patterns

Strategy: validation

Validate before calling

if len(strings.Split(orefStr, ":")) != 2 { return fmt.Errorf("oref must be type:oid") }

Type guard

func isWellFormedORef(s string) bool { p := strings.Split(s, ":"); return len(p) == 2 && p[0] != "" && p[1] != "" }

Try / catch

if err := validateORefFormat(orefStr); err != nil { return err }
_, err := svc.UpdateObjectMeta(uiContext, orefStr, meta)
if err != nil { return err }

Prevention

When it happens

Trigger: Calling UpdateObjectMeta with a bare OID, empty string, a ref containing multiple colons, or a decorated identifier like 'wave://block:id'.

Common situations: Hand-assembling the oref string in frontend code; passing a full meta JSON or block id where a full ORef string is expected; logging formats that prefix the ref.

Related errors


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