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, nilView on GitHub (pinned to 71377f2769)
Solutions
- Check the exact accepted field names in buildUpdatePatch's switch (cmd/bd/update.go) and correct the key spelling
- Update the client/script to the current beads patch schema (run `bd update --help` for supported flags)
- If a needed field is genuinely missing, add a case for it in buildUpdatePatch (and set the corresponding IssuePatch field)
- 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
- Copy field names from `bd update --help` or the buildUpdatePatch switch rather than from memory
- Pin bd versions across CLI and proxy clients so payloads match schemas
- Add a unit test that round-trips every documented update field through buildUpdatePatch
- Validate payload keys before sending updates in automation
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
- unsupported value %T for update field %q
- %s
- line %d (%s): %w
- line %d: %w
- %w. Hint: run 'bd init' to create a database in the current
AI-assisted analysis of gastownhall/beads@71377f2769 (2026-08-30).
Data as JSON: /api/errors/14eeb2638c45278e.
Report an issue: GitHub.