feat: Implement Step.Gate evaluation (Phase 1: Human Gates)
This implements Phase 1 of the Step.Gate feature (bd-7zka.2): - bd cook now creates gate issues for steps with gate fields - Gate issues have type=gate and block the gated step via dependency - bd list filters out gate issues by default (use --include-gates to show) - New bd gate command with list and resolve subcommands Gate types supported in Phase 1: - human: Manual closure via bd close or bd gate resolve Implementation details: - createGateIssue() in cook.go creates gate issues with proper metadata - collectSteps() creates gate dependencies when processing gated steps - IssueFilter.ExcludeTypes added to storage layer for type-based filtering - Gate command provides dedicated UX for gate management 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1719,6 +1719,16 @@ func (s *SQLiteStorage) SearchIssues(ctx context.Context, query string, filter t
|
||||
whereClauses = append(whereClauses, fmt.Sprintf("status NOT IN (%s)", strings.Join(placeholders, ",")))
|
||||
}
|
||||
|
||||
// Type exclusion (for hiding internal types like gates, bd-7zka.2)
|
||||
if len(filter.ExcludeTypes) > 0 {
|
||||
placeholders := make([]string, len(filter.ExcludeTypes))
|
||||
for i, t := range filter.ExcludeTypes {
|
||||
placeholders[i] = "?"
|
||||
args = append(args, string(t))
|
||||
}
|
||||
whereClauses = append(whereClauses, fmt.Sprintf("issue_type NOT IN (%s)", strings.Join(placeholders, ",")))
|
||||
}
|
||||
|
||||
if filter.Priority != nil {
|
||||
whereClauses = append(whereClauses, "priority = ?")
|
||||
args = append(args, *filter.Priority)
|
||||
|
||||
@@ -1081,6 +1081,16 @@ func (t *sqliteTxStorage) SearchIssues(ctx context.Context, query string, filter
|
||||
whereClauses = append(whereClauses, fmt.Sprintf("status NOT IN (%s)", strings.Join(placeholders, ",")))
|
||||
}
|
||||
|
||||
// Type exclusion (for hiding internal types like gates, bd-7zka.2)
|
||||
if len(filter.ExcludeTypes) > 0 {
|
||||
placeholders := make([]string, len(filter.ExcludeTypes))
|
||||
for i, t := range filter.ExcludeTypes {
|
||||
placeholders[i] = "?"
|
||||
args = append(args, string(t))
|
||||
}
|
||||
whereClauses = append(whereClauses, fmt.Sprintf("issue_type NOT IN (%s)", strings.Join(placeholders, ",")))
|
||||
}
|
||||
|
||||
if filter.Priority != nil {
|
||||
whereClauses = append(whereClauses, "priority = ?")
|
||||
args = append(args, *filter.Priority)
|
||||
|
||||
Reference in New Issue
Block a user