rdev/internal/port/sdlc_executor.go
jordan 56e3f83955 feat: add auth scopes, OpenAPI docs, SDLC guides, and code quality improvements
- Add auth.RequireScope() to all handler routes for proper authorization
- Add SDLC OpenAPI endpoint documentation (state, features, tasks, branches, merge, archive, orchestrator)
- Add SDLC documentation guides (getting-started, cli-reference, api-reference, command-catalog)
- Add artifact_test.go for SDLC artifact coverage
- Add CLAUDE.md rules: auth scopes requirement, error wrapping with %w
- Fix error wrapping to use %w instead of %v throughout codebase
- Improve CLI merge command with conflict detection and resolution
- Fix handler tests to include auth middleware for RequireScope
- Add cookbook tree runner scripts for automated testing

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 13:55:50 -07:00

116 lines
4.4 KiB
Go

package port
import (
"context"
"github.com/orchard9/rdev/internal/sdlc"
)
// SDLCExecutor defines operations for executing SDLC commands in project pods.
// The adapter runs `sdlc` CLI commands via kubectl exec and parses JSON output.
type SDLCExecutor interface {
// GetState returns the global SDLC state for a project pod.
GetState(ctx context.Context, podName string) (*sdlc.State, error)
// GetNext returns the classifier's recommendation for the next action.
// If feature is empty, the classifier picks the most relevant feature.
GetNext(ctx context.Context, podName, feature string) (*sdlc.Classification, error)
// ListFeatures returns all features in the project.
ListFeatures(ctx context.Context, podName string) ([]*sdlc.Feature, error)
// GetFeature returns a single feature by slug.
GetFeature(ctx context.Context, podName, slug string) (*sdlc.Feature, error)
// CreateFeature creates a new feature with the given slug and title.
CreateFeature(ctx context.Context, podName, slug, title string) (*sdlc.Feature, error)
// TransitionFeature moves a feature to the specified phase.
TransitionFeature(ctx context.Context, podName, slug string, phase sdlc.FeaturePhase) error
// BlockFeature adds a blocker reason to a feature.
BlockFeature(ctx context.Context, podName, slug, reason string) error
// UnblockFeature removes all blockers from a feature.
UnblockFeature(ctx context.Context, podName, slug string) error
// DeleteFeature removes a feature entirely.
DeleteFeature(ctx context.Context, podName, slug string) error
// GetArtifactStatus returns artifact statuses for a feature.
GetArtifactStatus(ctx context.Context, podName, slug string) (map[sdlc.ArtifactType]*sdlc.Artifact, error)
// ApproveArtifact approves a feature artifact.
ApproveArtifact(ctx context.Context, podName, slug string, artType sdlc.ArtifactType) error
// RejectArtifact rejects a feature artifact.
RejectArtifact(ctx context.Context, podName, slug string, artType sdlc.ArtifactType) error
// ListTasks returns all tasks for a feature.
ListTasks(ctx context.Context, podName, slug string) ([]sdlc.Task, error)
// AddTask adds a new task to a feature.
AddTask(ctx context.Context, podName, slug, title string) (*sdlc.Task, error)
// StartTask marks a task as in-progress.
StartTask(ctx context.Context, podName, slug, taskID string) error
// CompleteTask marks a task as complete.
CompleteTask(ctx context.Context, podName, slug, taskID string) error
// BlockTask marks a task as blocked.
BlockTask(ctx context.Context, podName, slug, taskID string) error
// QueryBlocked returns all blocked features.
QueryBlocked(ctx context.Context, podName string) ([]BlockedInfo, error)
// QueryReady returns features ready for work.
QueryReady(ctx context.Context, podName string) ([]ReadyInfo, error)
// QueryNeedsApproval returns features awaiting approval.
QueryNeedsApproval(ctx context.Context, podName string) ([]ApprovalInfo, error)
// CreateBranch creates a feature branch and its manifest.
CreateBranch(ctx context.Context, podName, slug string) (*sdlc.BranchManifest, error)
// GetBranchStatus returns the branch manifest, merge checklist, and readiness.
GetBranchStatus(ctx context.Context, podName, slug string) (*BranchStatus, error)
// SyncBranch syncs a feature branch with its base branch.
SyncBranch(ctx context.Context, podName, slug string) error
// MergeFeature merges a feature branch after all gates pass.
MergeFeature(ctx context.Context, podName, slug, strategy string) error
// ArchiveFeature archives a released feature.
ArchiveFeature(ctx context.Context, podName, slug string) error
}
// BlockedInfo describes a blocked feature (matches sdlc query --json output).
type BlockedInfo struct {
Slug string `json:"slug"`
Phase string `json:"phase"`
Blockers []string `json:"blockers"`
}
// ReadyInfo describes a feature ready for work (matches sdlc query --json output).
type ReadyInfo struct {
Slug string `json:"slug"`
Phase string `json:"phase"`
Action string `json:"action"`
}
// ApprovalInfo describes a feature awaiting approval (matches sdlc query --json output).
type ApprovalInfo struct {
Slug string `json:"slug"`
Phase string `json:"phase"`
Message string `json:"message"`
}
// BranchStatus contains the full branch status response including checklist.
type BranchStatus struct {
Branch *sdlc.BranchManifest `json:"branch"`
Checklist []string `json:"checklist"`
Ready bool `json:"ready"`
}