{"record":{"id":"1fdd5a17ec60d33c","repo":"multica-ai/multica","slug":"short-task-run-prefixes-require-issue-issue-id","errorCode":null,"errorMessage":"short task run prefixes require --issue <issue-id>; pass a full task UUID or run `multica issue runs <issue-id> --full-id`","messagePattern":"short task run prefixes require --issue <issue-id>; pass a full task UUID or run `multica issue runs <issue-id> --full-id`","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/cmd/multica/cmd_id_resolver.go","lineNumber":282,"sourceCode":"\t\t\tcontinue\n\t\t}\n\t\tif resp.Total > 0 {\n\t\t\tif offset >= resp.Total {\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcontinue\n\t\t}\n\t}\n\treturn candidates, nil\n}\n\nfunc resolveTaskRunID(ctx context.Context, client *cli.APIClient, issueID, input string) (resolvedID, error) {\n\ttrimmed := strings.TrimSpace(input)\n\tif uuidRegexp.MatchString(trimmed) {\n\t\treturn resolvedID{ID: trimmed, Display: trimmed}, nil\n\t}\n\tif strings.TrimSpace(issueID) == \"\" {\n\t\treturn resolvedID{}, fmt.Errorf(\"short task run prefixes require --issue <issue-id>; pass a full task UUID or run `multica issue runs <issue-id> --full-id`\")\n\t}\n\tfetch := func(ctx context.Context, client *cli.APIClient) ([]idCandidate, error) {\n\t\treturn fetchTaskRunCandidatesForIssue(ctx, client, issueID)\n\t}\n\treturn resolveIDByPrefix(ctx, client, \"task run\", input, fetch)\n}\n\nfunc fetchTaskRunCandidatesForIssue(ctx context.Context, client *cli.APIClient, issueID string) ([]idCandidate, error) {\n\tvar runs []map[string]any\n\tif err := client.GetJSON(ctx, \"/api/issues/\"+url.PathEscape(issueID)+\"/task-runs\", &runs); err != nil {\n\t\treturn nil, err\n\t}\n\tcandidates := make([]idCandidate, 0, len(runs))\n\tfor _, r := range runs {\n\t\tid := strVal(r, \"id\")\n\t\tif id == \"\" {\n\t\t\tcontinue\n\t\t}","sourceCodeStart":264,"sourceCodeEnd":300,"githubUrl":"https://github.com/multica-ai/multica/blob/2c0912b6ec764b373d44eeea1e80f0d9f11ab417/server/cmd/multica/cmd_id_resolver.go#L264-L300","documentation":"Returned by resolveTaskRunID when the input is not a full UUID (uuidRegexp fails) and no --issue id was supplied. Task runs are nested under issues, so prefix resolution requires fetching the run list of a specific issue; there is no global task-run listing to match against.","triggerScenarios":"Passing a short task-run prefix to a command without also passing --issue <issue-id>. The full-UUID path returns immediately; only short prefixes need the issue context to fetch fetchTaskRunCandidatesForIssue.","commonSituations":"Scripts written around prefix convenience that omit the parent issue; interactive use where the user copies a truncated run id from logs and forgets the issue; command invocations migrated from older versions with different requirements.","solutions":["Add --issue <issue-id> (issue key or full UUID) alongside the short task-run prefix","Or pass the full task-run UUID, which needs no issue context","Or run multica issue runs <issue-id> --full-id to copy the full run UUID"],"exampleFix":"# before\nmultica task-run logs \"ab12cd\"\n# error: short task run prefixes require --issue <issue-id>; ...\n\n# after\nmultica task-run logs --issue MUL-1852 \"ab12cd\"\n# or\nmultica issue runs MUL-1852 --full-id  # then use the full UUID","handlingStrategy":"validation","validationCode":"if !isFullUUID(runID) && strings.TrimSpace(issueID) == \"\" {\n    return errors.New(\"short task-run prefix needs --issue; pass the full UUID otherwise\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Pair task-run prefixes with --issue by convention in all scripts","Extract full run UUIDs via multica issue runs <issue> --full-id for storage"],"tags":["cli","task-runs","id-resolution","hierarchical-resources"],"backgroundTag":null,"analyzedSha":"2c0912b6ec764b373d44eeea1e80f0d9f11ab417","analyzedAt":"2026-08-15T13:25:18.241Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}