gastownhall/beads · error

unsupported update field %q

Error message

unsupported update field %q

What it means

buildUpdatePatch (cmd/bd/update.go) converts a map of update fields (from `bd update` flags or a proxied update request) into an issueops.IssuePatch. It switches on the field key and returns this error for any key it does not recognize. It indicates the caller supplied a field name outside the supported set (e.g. a typo like 'tittle' or an API payload using a renamed/removed field).

Source

Thrown at cmd/bd/update.go:751

				if err != nil {
					return issueops.IssuePatch{}, err
				}
				patch.Metadata.Set = set
			}
		case storageissueops.OpUnsetMetadata:
			patch.Metadata.Unset, ok = value.([]string)
		case "wisp":
			var flag bool
			if flag, ok = value.(bool); ok {
				wisp = &flag
			}
		case "no_history":
			var flag bool
			if flag, ok = value.(bool); ok {
				noHistory = &flag
			}
		default:
			return issueops.IssuePatch{}, fmt.Errorf("unsupported update field %q", key)
		}
		if !ok {
			return issueops.IssuePatch{}, fmt.Errorf("unsupported value %T for update field %q", value, key)
		}
	}
	// --ephemeral/--persistent/--no-history/--history select one complete
	// persistence state. The flag parsing already rejects the contradictory
	// pairs; the remaining combinations resolve most-specific-first, which
	// reproduces the column pairs the old two-boolean write produced.
	switch {
	case wisp != nil && *wisp:
		patch.Persistence = setField(issueops.PersistenceModeEphemeral)
	case noHistory != nil && *noHistory:
		patch.Persistence = setField(issueops.PersistenceModeNoHistory)
	case wisp != nil || noHistory != nil:
		patch.Persistence = setField(issueops.PersistenceModePersistent)
	}
	return patch, nil

View on GitHub (pinned to 71377f2769)

Solutions

  1. Check the exact accepted field names in buildUpdatePatch's switch (cmd/bd/update.go) and correct the key spelling
  2. Update the client/script to the current beads patch schema (run `bd update --help` for supported flags)
  3. If a needed field is genuinely missing, add a case for it in buildUpdatePatch (and set the corresponding IssuePatch field)
  4. For proxied clients, upgrade the bd binary on both ends so payloads match the installed schema

Example fix

// before
fields["assignned_to"] = "alice"
// after
fields["assignee"] = "alice"
Defensive patterns

Strategy: validation

Validate before calling

allowed := map[string]bool{"title": true, "description": true, "status": true, "priority": true, "assignee": true, "no_history": true /* ...see buildUpdatePatch */}
for k := range fields {
	if !allowed[k] {
		return fmt.Errorf("unknown update field %q", k)
	}
}

Try / catch

patch, err := buildUpdatePatch(fields)
if err != nil {
	var ufe *unsupportedFieldError // or string match on "unsupported update field"
	if strings.Contains(err.Error(), "unsupported update field") {
		// log the offending key and fall back to allowed-field construction
	}
	return err
}

Prevention

When it happens

Trigger: `bd update <id> --unknown-flag` mapping into a map key the switch does not handle; a proxiedUpdatePatch client sending JSON with an outdated or misspelled field name to the update endpoint.

Common situations: Scripting against the bd update payload with a field name from an older beads version that was renamed; typos in automation; proxy clients not updated after the patch schema changed.

Related errors


AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30). Data as JSON: /api/errors/14eeb2638c45278e. Report an issue: GitHub.