{"record":{"id":"3b50ced7abc3f384","repo":"multica-ai/multica","slug":"resolve-subscriber-q-w","errorCode":null,"errorMessage":"resolve subscriber %q: %w","messagePattern":"resolve subscriber %q: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/cmd/multica/cmd_autopilot.go","lineNumber":751,"sourceCode":"\tpath := \"/api/autopilots/\" + autopilotRef.ID + \"/triggers/\" + triggerRef.ID\n\tif err := client.DeleteJSON(ctx, path); err != nil {\n\t\treturn fmt.Errorf(\"delete trigger: %w\", err)\n\t}\n\tfmt.Printf(\"Trigger %s deleted.\\n\", triggerRef.ID)\n\treturn nil\n}\n\nfunc resolveAutopilotSubscriberInputs(ctx context.Context, client *cli.APIClient, refs []string) ([]map[string]string, error) {\n\tinputs := make([]map[string]string, 0, len(refs))\n\tseen := map[string]struct{}{}\n\tmemberOnly := assigneeKinds{member: true}\n\tfor _, ref := range refs {\n\t\tif strings.TrimSpace(ref) == \"\" {\n\t\t\treturn nil, fmt.Errorf(\"--subscriber cannot be empty\")\n\t\t}\n\t\tuserType, userID, err := resolveAssignee(ctx, client, ref, memberOnly)\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"resolve subscriber %q: %w\", ref, err)\n\t\t}\n\t\tif userType != \"member\" {\n\t\t\treturn nil, fmt.Errorf(\"subscriber %q resolved to %s; autopilot subscribers must be members\", ref, userType)\n\t\t}\n\t\tif _, ok := seen[userID]; ok {\n\t\t\tcontinue\n\t\t}\n\t\tseen[userID] = struct{}{}\n\t\tinputs = append(inputs, map[string]string{\n\t\t\t\"user_type\": \"member\",\n\t\t\t\"user_id\":   userID,\n\t\t})\n\t}\n\treturn inputs, nil\n}\n\n// ---------------------------------------------------------------------------\n// Helpers","sourceCodeStart":733,"sourceCodeEnd":769,"githubUrl":"https://github.com/multica-ai/multica/blob/2c0912b6ec764b373d44eeea1e80f0d9f11ab417/server/cmd/multica/cmd_autopilot.go#L733-L769","documentation":"Wraps any failure from resolveAssignee while resolving one --subscriber reference for an autopilot trigger. The inner error carries the actual cause: the GET request to look up the assignee failed, or the reference matched no member (resolveAssignee is constrained to assigneeKinds{member: true} here). The %q shows which ref failed.","triggerScenarios":"`multica autopilot trigger create --subscriber <ref>` where <ref> is neither an existing member's email/ID nor resolvable in the current workspace; or the API lookup request itself fails (auth expired, server unreachable).","commonSituations":"Typo'd or stale username/email after a member left the workspace; using an agent or team reference as a subscriber (only members allowed); expired CLI session token.","solutions":["Check the wrapped error text: 'no match' means the ref is wrong — verify the member exists with `multica member list`.","If the wrapped error is a transport/auth failure, refresh the session (`multica auth login` or equivalent) and retry.","Ensure the reference is a member, not an agent or team — subscriber resolution is member-only by assigneeKinds{member: true}."],"exampleFix":"# before\nmultica autopilot trigger create --name t1 --subscriber jn doe\n# after\nmultica autopilot trigger create --name t1 --subscriber \"jdoe@example.com\"","handlingStrategy":"validation","validationCode":"# verify the member exists before creating the trigger\nmultica member list --output json | jq -e --arg s \"$SUB\" '.[] | select(.email == $s or .id == $s)' >/dev/null \\\n  || { echo \"subscriber $SUB is not a resolvable member\" >&2; exit 2; }\nmultica autopilot trigger create --name t1 --subscriber \"$SUB\"","typeGuard":null,"tryCatchPattern":"if err := runAutopilotCreate(); err != nil {\n    var re *cli.RunError\n    if errors.As(err, &re) && strings.HasPrefix(re.Msg, \"resolve subscriber\") {\n        // extract ref from message, verify membership, surface actionable hint\n    }\n    return err\n}","preventionTips":["Pre-validate subscriber refs against `member list` in scripts so failures happen with your own context.","Pin scripts to member emails rather than display names; emails change less often."],"tags":["cli","api","autopilot","member-resolution","go"],"backgroundTag":null,"analyzedSha":"2c0912b6ec764b373d44eeea1e80f0d9f11ab417","analyzedAt":"2026-08-15T13:25:18.241Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}