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
- Pass exactly 'type:oid' (e.g. 'block:B123') with a single ':'
- Validate the format with a split(':') check before the call
- 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
- Construct orefs with ORef helpers instead of string building
- Validate 'type:oid' format at API boundaries
- Do not pass bare ids or URIs where an oref string is expected
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
- invalid object reference: %q
- oref is required
- badge oref must be a block or tab (got %q)
- invalid AIMessage: %w
- part %d: text type requires non-empty text field
AI-assisted analysis of wavetermdev/waveterm@a4447c1563 (2026-09-01).
Data as JSON: /api/errors/7c90f7ee056efe54.
Report an issue: GitHub.