multica-ai/multica · error

--subscriber cannot be empty

Error message

--subscriber cannot be empty

What it means

Thrown by resolveAutopilotSubscriberInputs when a --subscriber flag value is empty or only whitespace. The autopilot trigger-create command validates each subscriber reference up front before calling resolveAssignee, so an empty string never reaches the API. This is pure client-side argument validation in the multica CLI.

Source

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

	if err != nil {
		return fmt.Errorf("resolve trigger: %w", err)
	}

	path := "/api/autopilots/" + autopilotRef.ID + "/triggers/" + triggerRef.ID
	if err := client.DeleteJSON(ctx, path); err != nil {
		return fmt.Errorf("delete trigger: %w", err)
	}
	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

View on GitHub (pinned to 2c0912b6ec)

Solutions

  1. Remove the empty --subscriber argument or fix the shell variable that expanded to empty (check with `echo "[$SUB]"`).
  2. If scripting, guard each ref: skip or fail with context before invoking the CLI.
  3. Re-run with only non-empty subscriber references.

Example fix

# before
multica autopilot trigger create --name t1 --subscriber "$SUB"
# after
multica autopilot trigger create --name t1 --subscriber "${SUB:?SUB must be set}"
Defensive patterns

Strategy: validation

Validate before calling

# shell: fail fast on empty subscriber refs before calling the CLI
for sub in "${SUBS[@]}"; do
  [ -n "$(printf '%s' "$sub" | tr -d '[:space:]')" ] || { echo "empty subscriber ref" >&2; exit 2; }
done
multica autopilot trigger create --name t1 "${SUBS[@]/#/--subscriber }"

Prevention

When it happens

Trigger: Running `multica autopilot trigger create --subscriber ""` or passing a subscriber list where one element is blank (e.g. repeated flags like `--subscriber alice --subscriber ""`, or shell expansion producing an empty variable like $EMPTY_USER).

Common situations: Shell scripts passing unset environment variables as subscriber refs; copy-pasting command templates with placeholder values; trailing commas in a loop that feeds empty strings.

Related errors


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