wavetermdev/waveterm · error
invalid oref string: %v
Error message
invalid oref string: %v
What it means
Returned when a string cannot be parsed as a valid oref (object reference), such as malformed syntax or an unknown reference format. The offending input is included via %v for diagnostics.
Source
Thrown at pkg/service/service.go:121
if _, ok := jsonArg.(map[string]any); !ok {
return nil, fmt.Errorf("cannot convert %T to %s", jsonArg, argType)
}
cmd, err := webcmd.ParseWSCommandMap(jsonArg.(map[string]any))
if err != nil {
return nil, fmt.Errorf("error parsing command map: %w", err)
}
return cmd, nil
}
func convertSpecial(argType reflect.Type, jsonArg any) (any, error) {
jsonType := reflect.TypeOf(jsonArg)
if argType == orefRType {
if jsonType.Kind() != reflect.String {
return nil, fmt.Errorf("cannot convert %T to %s", jsonArg, argType)
}
oref, err := waveobj.ParseORef(jsonArg.(string))
if err != nil {
return nil, fmt.Errorf("invalid oref string: %v", err)
}
return oref, nil
} else if argType == wsCommandRType {
return convertWSCommand(argType, jsonArg)
} else if argType == waveObjRType {
if jsonType.Kind() != reflect.Map {
return nil, fmt.Errorf("cannot convert %T to %s", jsonArg, argType)
}
return waveobj.FromJsonMap(jsonArg.(map[string]any))
} else if argType == waveObjSliceRType {
if jsonType.Kind() != reflect.Slice {
return nil, fmt.Errorf("cannot convert %T to %s", jsonArg, argType)
}
sliceArg := jsonArg.([]any)
nativeSlice := make([]waveobj.WaveObj, len(sliceArg))
for idx, elem := range sliceArg {
elemMap, ok := elem.(map[string]any)
if !ok {View on GitHub (pinned to a4447c1563)
Solutions
- Read the wrapped cause for the exact parse failure.
- Trim whitespace and verify the OID matches the expected Wave OID format.
- Re-fetch the identifier from the backend instead of reconstructing it manually.
Example fix
// before
oref, err := waveobj.ParseORef(" " + oid + ":")
// after
oref, err := waveobj.ParseORef(strings.TrimSpace(oid))
if err != nil {
return fmt.Errorf("bad oid %q: %v", oid, err)
} Defensive patterns
Strategy: validation
Validate before calling
oid = strings.TrimSpace(oid)
if oid == "" {
return fmt.Errorf("empty oref")
}
if _, err := waveobj.ParseORef(oid); err != nil {
return fmt.Errorf("bad oref %q: %v", oid, err)
} Try / catch
_, err := waveobj.ParseORef(s)
if err != nil {
return fmt.Errorf("invalid oref %q: %w", s, err)
} Prevention
- Copy OIDs from APIs, not hand-edited logs or URLs.
- Trim and sanitize identifiers from URL/route params.
- Validate ORef format at the boundary before deeper calls.
When it happens
Trigger: Passing a malformed OID string to an ORef parameter - wrong length/charset, empty string, or a 'type:oid' composite with an unknown type prefix.
Common situations: Truncated or whitespace-contaminated OIDs copied from logs; OIDs mangled by URL decoding; type and ID concatenated with the wrong separator.
Understand the failure class
Background: "invalid id" errors: invalid identifier format — why libraries reject IDs before lookup, and how to fix them — this error's family across 37 libraries.
Related errors
- invalid object reference: %q
- oref is required
- badge oref must be a block or tab (got %q)
- unmatched bracket at position %d
- invalid index at position %d: %v
AI-assisted analysis of wavetermdev/waveterm@a4447c1563 (2026-09-01).
Data as JSON: /api/errors/a29a968541ee1174.
Report an issue: GitHub.