{"record":{"id":"8607d815d98a99f7","repo":"multica-ai/multica","slug":"issue-id-is-required","errorCode":null,"errorMessage":"issue id is required","messagePattern":"issue id is required","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/cmd/multica/cmd_id_resolver.go","lineNumber":147,"sourceCode":"\n// resolveIssueRef accepts only the two canonical issue references:\n//\n//   - the human-facing issue key, e.g. \"MUL-1852\" (validated by\n//     looksLikeIssueIdentifier and resolved server-side);\n//   - the full UUID in dashed canonical form (validated by uuidRegexp).\n//\n// Short UUID prefixes (e.g. \"1881abcd\") were briefly supported but are no\n// longer — on large workspaces the CLI had to page the entire issue list\n// client-side to disambiguate, causing 14–35s timeouts (GH #4701). Since\n// `MUL-123` already covers every human use case for an issue reference, the\n// short-prefix path is removed instead of being moved server-side. Other\n// resources without a human-readable key (autopilots, projects, labels,\n// task runs, workspaces, ...) continue to accept short UUID prefixes; see\n// resolveIDByPrefix.\nfunc resolveIssueRef(ctx context.Context, client *cli.APIClient, input string) (resolvedID, error) {\n\ttrimmed := strings.TrimSpace(input)\n\tif trimmed == \"\" {\n\t\treturn resolvedID{}, fmt.Errorf(\"issue id is required\")\n\t}\n\n\tif looksLikeIssueIdentifier(trimmed) {\n\t\treturn fetchIssueRef(ctx, client, trimmed)\n\t}\n\tif uuidRegexp.MatchString(trimmed) {\n\t\treturn fetchIssueRef(ctx, client, trimmed)\n\t}\n\n\t// Detect the common \"I copied a truncated UUID\" case and give a\n\t// tailored hint. normalizeUUIDPrefix succeeds for any input that is\n\t// ≥4 hex chars (after stripping dashes), which matches what the old\n\t// resolver used to accept as a prefix.\n\tif _, err := normalizeUUIDPrefix(trimmed); err == nil {\n\t\treturn resolvedID{}, fmt.Errorf(\n\t\t\t\"issue ref %q looks like a short UUID prefix; short prefixes are no longer supported for issues. \"+\n\t\t\t\t\"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)\",\n\t\t\tinput,","sourceCodeStart":129,"sourceCodeEnd":165,"githubUrl":"https://github.com/multica-ai/multica/blob/2c0912b6ec764b373d44eeea1e80f0d9f11ab417/server/cmd/multica/cmd_id_resolver.go#L129-L165","documentation":"Returned by resolveIssueRef when the issue reference argument trims to an empty string. Issues have their own resolver because they accept two canonical forms (issue key like MUL-1852, or full dashed UUID); an empty value satisfies neither.","triggerScenarios":"Calling an issue command with an empty or whitespace-only reference: multica issue show \"\" or a flag fed by an unset variable.","commonSituations":"Scripts forwarding unset variables; CI parameters left empty; command templates where the issue placeholder was never filled in.","solutions":["Pass the issue key (e.g. MUL-123) or the full UUID shown by multica issue list","Guard call sites with non-empty checks or \"${VAR:?issue id is required}\"","If the id should come from prior command output, verify that command succeeded first"],"exampleFix":"# before\nmultica issue show \"\"\n\n# after\nmultica issue show MUL-1852  # or the full UUID","handlingStrategy":"validation","validationCode":"ref := strings.TrimSpace(input)\nif ref == \"\" {\n    return errors.New(\"issue id is required\")\n}\n// proceed with multica issue show \"$ref\"","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Use ${ISSUE_REF:?issue id is required} in shell wrappers","Prefer issue keys (MUL-123) as the stable human-facing reference in scripts"],"tags":["cli","validation","issues","empty-input"],"backgroundTag":null,"analyzedSha":"2c0912b6ec764b373d44eeea1e80f0d9f11ab417","analyzedAt":"2026-08-15T13:25:18.241Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}