multica-ai/multica · error

issue ref %q looks like a short UUID prefix; short prefixes

Error message

issue ref %q looks like a short UUID prefix; short prefixes are no longer supported for issues. Use the issue key (e.g. MUL-123) shown by `multica issue list`, or pass the full UUID (run a list command with --full-id to copy it)

What it means

Returned by resolveIssueRef when the input normalizes as a short UUID prefix (>= 4 hex chars after dash-stripping) but is neither an issue key nor a full UUID. Short prefixes for issues were deliberately removed: resolving them required client-side paging of the entire issue list, causing 14–35s timeouts on large workspaces (GH #4701). The message offers the two supported alternatives.

Source

Thrown at server/cmd/multica/cmd_id_resolver.go:162

func resolveIssueRef(ctx context.Context, client *cli.APIClient, input string) (resolvedID, error) {
	trimmed := strings.TrimSpace(input)
	if trimmed == "" {
		return resolvedID{}, fmt.Errorf("issue id is required")
	}

	if looksLikeIssueIdentifier(trimmed) {
		return fetchIssueRef(ctx, client, trimmed)
	}
	if uuidRegexp.MatchString(trimmed) {
		return fetchIssueRef(ctx, client, trimmed)
	}

	// Detect the common "I copied a truncated UUID" case and give a
	// tailored hint. normalizeUUIDPrefix succeeds for any input that is
	// ≥4 hex chars (after stripping dashes), which matches what the old
	// resolver used to accept as a prefix.
	if _, err := normalizeUUIDPrefix(trimmed); err == nil {
		return resolvedID{}, fmt.Errorf(
			"issue ref %q looks like a short UUID prefix; short prefixes are no longer supported for issues. "+
				"Use the issue key (e.g. MUL-123) shown by `multica issue list`, or pass the full UUID (run a list command with --full-id to copy it)",
			input,
		)
	}
	return resolvedID{}, fmt.Errorf(
		"issue ref %q is not a recognized issue reference; use the issue key (e.g. MUL-123) shown by `multica issue list`, or pass the full UUID",
		input,
	)
}

func fetchIssueRef(ctx context.Context, client *cli.APIClient, ref string) (resolvedID, error) {
	var issue map[string]any
	if err := client.GetJSON(ctx, "/api/issues/"+url.PathEscape(ref), &issue); err != nil {
		return resolvedID{}, err
	}
	c := issueCandidate(issue)
	if c.Display == "" {

View on GitHub (pinned to 2c0912b6ec)

Solutions

  1. Use the issue key (e.g. MUL-123) shown by multica issue list
  2. Or pass the full UUID — run multica issue list --full-id to copy it
  3. Update any scripts still passing truncated issue UUIDs to use keys or full UUIDs

Example fix

# before
multica issue show 1881abcd
# error: issue ref "1881abcd" looks like a short UUID prefix; ...

# after
multica issue show MUL-1852
# or
multica issue list --full-id && multica issue show 1881abcd3e-...-full-uuid
Defensive patterns

Strategy: type-guard

Validate before calling

// isShortUUIDPrefix reports whether input would be rejected as an issue
// short prefix (hex, >= 4 chars, but not a full UUID or issue key).
func isShortUUIDPrefix(input string) bool {
    t := strings.TrimSpace(input)
    if isFullUUID(t) || looksLikeIssueKey(t) {
        return false
    }
    _, err := normalizeUUIDPrefix(t)
    return err == nil
}

Type guard

// IssueRefOK narrows an input to the two accepted issue reference forms.
func IssueRefOK(input string) bool {
    t := strings.TrimSpace(input)
    return looksLikeIssueIdentifier(t) || uuidRegexp.MatchString(t)
}

Prevention

When it happens

Trigger: Passing a truncated issue UUID like "1881abcd" or "1881" to any issue command. normalizeUUIDPrefix succeeds on it (hex, >= 4 chars), so the tailored hint fires instead of the generic unrecognized-reference error.

Common situations: Users who relied on short issue prefixes in older CLI versions after upgrading; copying a truncated UUID from log output or a trimmed table; muscle memory from other resources (labels, projects) that still accept prefixes.

Related errors


AI-assisted analysis of multica-ai/multica@2c0912b6ec (2026-08-15). Data as JSON: /api/errors/7037d044835b30de. Report an issue: GitHub.