{"record":{"id":"168574a38b9419be","repo":"gastownhall/beads","slug":"epic-s-not-found-v","errorCode":null,"errorMessage":"epic '%s' not found: %v","messagePattern":"epic '(.+?)' not found: (.+?)","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cmd/bd/swarm_proxied_server.go","lineNumber":49,"sourceCode":"\tevt := metrics.NewCommandEvent(\"swarm-validate\")\n\tdefer func() {\n\t\tif c := metrics.Global(); c != nil {\n\t\t\tc.CloseEventAndAdd(evt)\n\t\t}\n\t}()\n\n\tverbose, _ := cmd.Flags().GetBool(\"verbose\")\n\n\tif uowProvider == nil {\n\t\treturn HandleErrorRespectJSON(\"proxied-server UOW provider not initialized\")\n\t}\n\n\tanalysis, err := uow.RunTxRead(ctx, uowProvider, func(ctx context.Context, uw uow.UnitOfWork) (*SwarmAnalysis, error) {\n\t\tr := uowMolReader{uw: uw}\n\n\t\tepicID, err := utils.ResolvePartialID(ctx, r, args[0])\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"epic '%s' not found: %v\", args[0], err)\n\t\t}\n\n\t\tepic, err := uw.IssueUseCase().GetIssue(ctx, epicID)\n\t\tif gateProxiedNotFound(err) || (err == nil && epic == nil) {\n\t\t\t// Classic reports a nil epic after a successful resolve this way;\n\t\t\t// keep the message for parity.\n\t\t\treturn nil, fmt.Errorf(\"epic '%s' not found\", epicID)\n\t\t}\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"failed to get epic: %v\", err)\n\t\t}\n\n\t\tif epic.IssueType != types.TypeEpic && epic.IssueType != \"molecule\" {\n\t\t\treturn nil, fmt.Errorf(\"'%s' is not an epic or molecule (type: %s)\", epicID, epic.IssueType)\n\t\t}\n\n\t\tanalysis, err := analyzeEpicForSwarm(ctx, r, epic)\n\t\tif err != nil {","sourceCodeStart":31,"sourceCodeEnd":67,"githubUrl":"https://github.com/gastownhall/beads/blob/71377f276968b452ee607177637970a4ff888584/cmd/bd/swarm_proxied_server.go#L31-L67","documentation":"Error from runSwarmValidateProxiedServer in cmd/bd/swarm_proxied_server.go:49. It fires when utils.ResolvePartialID cannot turn the user-supplied argument (full ID or partial prefix) into a concrete issue ID while running `bd swarm validate` in proxied-server mode. The original resolver error is appended after the colon. This is a user-input resolution failure, not a storage fault.","triggerScenarios":"`bd swarm validate <prefix>` in proxied-server mode where the prefix matches no issue, is ambiguous (matches multiple), or the resolver's underlying lookup call fails.","commonSituations":"Typo in the epic ID; passing a short prefix that matches several issues; the epic lives in another repo/database not visible to the proxied server; issue was deleted or closed and pruned.","solutions":["Run `bd list` (or `bd show <full-id>`) to confirm the exact epic ID.","Use the full issue ID instead of a prefix to avoid ambiguity.","If the issue exists elsewhere, point the command at the right repo/database or sync with `bd dolt pull`.","Check the text after the colon for resolver-level causes (e.g. multiple matches) and disambiguate."],"exampleFix":"// before\nbd swarm validate bd-12   // ambiguous prefix\n\n// after\nbd swarm validate bd-1234","handlingStrategy":"validation","validationCode":"bd show bd-1234 >/dev/null 2>&1 && bd swarm validate bd-1234 || echo \"resolve the full ID first: bd list\"","typeGuard":null,"tryCatchPattern":"if err != nil && strings.Contains(err.Error(), \"not found\") {\n    // fall back to bd list and pick the exact ID\n}","preventionTips":["Copy full issue IDs instead of typing prefixes","Run bd list to confirm IDs before scripting swarm commands","Sync (bd dolt pull) when working across machines"],"tags":["go","cli","id-resolution","user-input"],"backgroundTag":"issue-id-not-found","analyzedSha":"71377f276968b452ee607177637970a4ff888584","analyzedAt":"2026-08-30T18:55:39.744Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}