fix(types): consolidate enhancement alias and fix update command

- Add "enhancement" to util.issueTypeAliases for consistency
- Make types.IssueType.Normalize() case-insensitive and include all aliases
- Fix update.go to normalize type before validation
- Remove duplicate type validation block in update.go

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
gastown/crew/george
2026-01-16 16:02:43 -08:00
committed by Steve Yegge
parent 62dd5f8585
commit aee86dfae2
3 changed files with 15 additions and 15 deletions

View File

@@ -12,6 +12,7 @@ import (
"github.com/steveyegge/beads/internal/timeparsing" "github.com/steveyegge/beads/internal/timeparsing"
"github.com/steveyegge/beads/internal/types" "github.com/steveyegge/beads/internal/types"
"github.com/steveyegge/beads/internal/ui" "github.com/steveyegge/beads/internal/ui"
"github.com/steveyegge/beads/internal/util"
"github.com/steveyegge/beads/internal/validation" "github.com/steveyegge/beads/internal/validation"
) )
@@ -103,7 +104,8 @@ create, update, show, or close operation).`,
} }
if cmd.Flags().Changed("type") { if cmd.Flags().Changed("type") {
issueType, _ := cmd.Flags().GetString("type") issueType, _ := cmd.Flags().GetString("type")
// Validate issue type // Normalize aliases (e.g., "enhancement" -> "feature") before validating
issueType = util.NormalizeIssueType(issueType)
if !types.IssueType(issueType).IsValid() { if !types.IssueType(issueType).IsValid() {
FatalErrorRespectJSON("invalid issue type %q. Valid types: bug, feature, task, epic, chore, merge-request, molecule, gate, agent, role, rig, convoy, event, slot", issueType) FatalErrorRespectJSON("invalid issue type %q. Valid types: bug, feature, task, epic, chore, merge-request, molecule, gate, agent, role, rig, convoy, event, slot", issueType)
} }
@@ -125,14 +127,6 @@ create, update, show, or close operation).`,
parent, _ := cmd.Flags().GetString("parent") parent, _ := cmd.Flags().GetString("parent")
updates["parent"] = parent updates["parent"] = parent
} }
if cmd.Flags().Changed("type") {
issueType, _ := cmd.Flags().GetString("type")
// Validate issue type
if _, err := validation.ParseIssueType(issueType); err != nil {
FatalErrorRespectJSON("%v", err)
}
updates["issue_type"] = issueType
}
// Gate fields (bd-z6kw) // Gate fields (bd-z6kw)
if cmd.Flags().Changed("await-id") { if cmd.Flags().Changed("await-id") {
awaitID, _ := cmd.Flags().GetString("await-id") awaitID, _ := cmd.Flags().GetString("await-id")

View File

@@ -529,11 +529,16 @@ func (t IssueType) IsValidWithCustom(customTypes []string) bool {
} }
// Normalize maps issue type aliases to their canonical form. // Normalize maps issue type aliases to their canonical form.
// For example, "enhancement" -> "feature". // For example, "enhancement" -> "feature", "mr" -> "merge-request".
// Case-insensitive to match util.NormalizeIssueType behavior.
func (t IssueType) Normalize() IssueType { func (t IssueType) Normalize() IssueType {
switch t { switch strings.ToLower(string(t)) {
case "enhancement": case "enhancement", "feat":
return TypeFeature return TypeFeature
case "mr":
return TypeMergeRequest
case "mol":
return TypeMolecule
default: default:
return t return t
} }

View File

@@ -4,9 +4,10 @@ import "strings"
// issueTypeAliases maps shorthand type names to canonical types // issueTypeAliases maps shorthand type names to canonical types
var issueTypeAliases = map[string]string{ var issueTypeAliases = map[string]string{
"mr": "merge-request", "mr": "merge-request",
"feat": "feature", "feat": "feature",
"mol": "molecule", "mol": "molecule",
"enhancement": "feature",
} }
// NormalizeIssueType expands type aliases to their canonical forms. // NormalizeIssueType expands type aliases to their canonical forms.