multica-ai/multica · error
option %q not found on property %q; valid options: %s
Error message
option %q not found on property %q; valid options: %s
What it means
Thrown by `encodeIssuePropertyValue`'s `resolveOption` closure when the value passed to `--value` for a select/multi_select property does not match any option by ID or case-insensitive name. The message lists all valid option names for the target property to make correction immediate.
Source
Thrown at server/cmd/multica/cmd_property.go:450
// ---------------------------------------------------------------------------
// issue property {list|set|unset}
// ---------------------------------------------------------------------------
// encodeIssuePropertyValue converts the CLI --value string into the typed
// JSON the API expects, translating option names to ids for select types.
func encodeIssuePropertyValue(property propertyDTO, raw string) (json.RawMessage, error) {
optionNames := make([]string, len(property.Config.Options))
for i, opt := range property.Config.Options {
optionNames[i] = opt.Name
}
resolveOption := func(ref string) (string, error) {
ref = strings.TrimSpace(ref)
for _, opt := range property.Config.Options {
if opt.ID == ref || strings.EqualFold(opt.Name, ref) {
return opt.ID, nil
}
}
return "", fmt.Errorf("option %q not found on property %q; valid options: %s", ref, property.Name, strings.Join(optionNames, ", "))
}
switch property.Type {
case "select":
id, err := resolveOption(raw)
if err != nil {
return nil, err
}
return json.Marshal(id)
case "multi_select":
parts := strings.Split(raw, ",")
ids := make([]string, 0, len(parts))
for _, part := range parts {
if strings.TrimSpace(part) == "" {
continue
}
id, err := resolveOption(part)
if err != nil {View on GitHub (pinned to 2c0912b6ec)
Solutions
- Use one of the option names listed in the error message exactly (matching is case-insensitive, so casing is safe).
- Run `multica property list` (or `multica issue property list <issue>`) to see current options and their names.
- Update scripts that hard-code old option names after renaming options on a property.
Example fix
// before multica issue property set ISS-1 --name Priority --value urgent // error: option "urgent" not found on property "Priority"; valid options: P0, P1, P2 // after multica issue property set ISS-1 --name Priority --value P0
Defensive patterns
Strategy: validation
Validate before calling
# bash: verify the option exists on the property before setting
multica property list | grep -qw "$OPT" || { echo "option $OPT not on property $PROP" >&2; exit 1; } Type guard
func isValidOption(p propertyDTO, ref string) bool {
ref = strings.TrimSpace(ref)
for _, opt := range p.Config.Options {
if opt.ID == ref || strings.EqualFold(opt.Name, ref) {
return true
}
}
return false
} Prevention
- Always copy option names from `multica property list` output.
- Matching is by ID or case-insensitive name — prefer the exact name.
- Re-validate hard-coded option names whenever property configs change.
When it happens
Trigger: `multica issue property set <issue> --name <select-prop> --value <bad>` where `<bad>` is neither an option ID nor an option name (case-insensitive). For multi_select, any comma-separated segment that fails resolution triggers it.
Common situations: Typo in an option name; option was renamed or archived after the script was written; using a display label that differs from the configured option name.
Related errors
- nothing to update; pass --name, --description, --icon, or --
- invalid direction %q (want \"up\" or \"down\")
- --name is required
- --runtime-id is required
- --runtime-config must be valid JSON: %w
AI-assisted analysis of multica-ai/multica@2c0912b6ec (2026-08-15).
Data as JSON: /api/errors/499a74416bcea8be.
Report an issue: GitHub.