multica-ai/multica · error

subscriber %q resolved to %s; autopilot subscribers must be

Error message

subscriber %q resolved to %s; autopilot subscribers must be members

What it means

resolveAutopilotSubscriberInputs restricts autopilot subscribers to real members. Even though resolveAssignee was called with member-only kinds, this guard re-checks the returned userType and rejects anything that resolved to a non-member type (e.g. an agent or team identity).

Source

Thrown at server/cmd/multica/cmd_autopilot.go:754

	}
	fmt.Printf("Trigger %s deleted.\n", triggerRef.ID)
	return nil
}

func resolveAutopilotSubscriberInputs(ctx context.Context, client *cli.APIClient, refs []string) ([]map[string]string, error) {
	inputs := make([]map[string]string, 0, len(refs))
	seen := map[string]struct{}{}
	memberOnly := assigneeKinds{member: true}
	for _, ref := range refs {
		if strings.TrimSpace(ref) == "" {
			return nil, fmt.Errorf("--subscriber cannot be empty")
		}
		userType, userID, err := resolveAssignee(ctx, client, ref, memberOnly)
		if err != nil {
			return nil, fmt.Errorf("resolve subscriber %q: %w", ref, err)
		}
		if userType != "member" {
			return nil, fmt.Errorf("subscriber %q resolved to %s; autopilot subscribers must be members", ref, userType)
		}
		if _, ok := seen[userID]; ok {
			continue
		}
		seen[userID] = struct{}{}
		inputs = append(inputs, map[string]string{
			"user_type": "member",
			"user_id":   userID,
		})
	}
	return inputs, nil
}

// ---------------------------------------------------------------------------
// Helpers
// ---------------------------------------------------------------------------

// uuidRegexp matches a canonical UUID (8-4-4-4-12 hex).

View on GitHub (pinned to 2c0912b6ec)

Solutions

  1. Replace the offending reference with a workspace member's email or member ID.
  2. List members to find the correct reference: `multica member list` (or the workspace members API).
  3. If you intended an agent on the trigger, use the trigger's agent field (--agent), not --subscriber.

Example fix

# before (agent name used as subscriber)
multica autopilot trigger create --name t1 --agent triage-bot --subscriber triage-bot
# after
multica autopilot trigger create --name t1 --agent triage-bot --subscriber "owner@example.com"
Defensive patterns

Strategy: validation

Validate before calling

# only pass refs that appear in the member list (agents/teams excluded)
multica member list --output json | jq -e --arg s "$SUB" '.[] | select(.user_type == "member") | select(.email == $s or .id == $s)' >/dev/null \
  || { echo "$SUB is not a member" >&2; exit 2; }

Prevention

When it happens

Trigger: Passing a reference that resolves to an agent or team user_type, e.g. `--subscriber <agent-name>` when an agent with that name exists in the workspace, or a ref whose lookup path returns a team identity.

Common situations: Confusing agent names with member names (an agent named 'reviewer' and a member named 'reviewer'); migrating subscribers from a system where teams could subscribe; assuming any assignee-shaped reference is valid.

Related errors


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