rdev/ai-lookup/services/sdlc.md
jordan f22b220c6d feat: add SDLC branch management, merge, archive, and orchestrator APIs
Add branch lifecycle commands (branch, merge, archive) to the SDLC CLI.
Introduce orchestrator handler and service for multi-step SDLC workflows.
Expand skeleton template with 15 Claude commands covering the full feature
lifecycle. Extend classifier rules, error types, and executor port for
branch operations. Split rules.go and classifier_test.go to stay within
500-line limit.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-02 12:30:03 -07:00

125 lines
5.6 KiB
Markdown

# SDLC Orchestration
**Last Updated:** 2026-02
**Confidence:** High (fully implemented - library, CLI, API, orchestrator, skeleton commands)
## Summary
Deterministic feature lifecycle management. Classifier engine evaluates priority-ordered rules to determine the next required action. State lives in `.sdlc/` directory (git-tracked). Used by Claude agents in pods (CLI) and by rdev API (Go library + kubectl exec).
**Key Facts:**
- 10 phases: draft -> specified -> planned -> ready -> implementation -> review -> audit -> qa -> merge -> released
- 25+ classifier rules, first match wins, returns Classification with action + guidance
- 7 artifact types: spec, design, tasks, qa_plan, review, audit, qa_results
- rdev drives transitions on behalf of users (approve, reject, unblock, transition)
- Multi-project: scoped by projectID (pod name), each pod has its own `.sdlc/`
- Orchestrator: execute/resolve/commit endpoints dispatch agent work and git operations
**File Pointers:**
- Library: `internal/sdlc/` (types, state, feature, classifier, rules, config, branch)
- CLI: `cmd/sdlc/` (cobra commands, --json output for API consumption)
- Port: `internal/port/sdlc_executor.go`
- Adapter: `internal/adapter/kubernetes/sdlc_executor.go`
- Service: `internal/service/sdlc_service.go`, `internal/service/sdlc_orchestrator.go`
- Handler: `internal/handlers/sdlc.go`, `internal/handlers/sdlc_*.go`
- Skeleton commands: `internal/adapter/templates/templates/skeleton/.claude/commands/` (15 files)
- Spec: `docs/specs/sdlc-orchestration-system.md`
- Guide: `.claude/guides/services/sdlc.md`
## Library Types
```go
// internal/sdlc/classifier.go
type Classification struct {
Feature string `json:"feature"`
CurrentPhase FeaturePhase `json:"current_phase"`
RuleMatched string `json:"rule_matched"`
Action ActionType `json:"action"`
Message string `json:"message"`
NextCommand string `json:"next_command,omitempty"`
OutputPath string `json:"output_path,omitempty"`
TransitionTo FeaturePhase `json:"transition_to,omitempty"`
TaskID string `json:"task_id,omitempty"`
}
// internal/sdlc/branch.go
type BranchManifest struct {
Name string `yaml:"name" json:"name"`
Feature string `yaml:"feature" json:"feature"`
BaseBranch string `yaml:"base_branch" json:"base_branch"`
CreatedAt time.Time `yaml:"created_at" json:"created_at"`
LastSyncAt *time.Time `yaml:"last_sync_at,omitempty" json:"last_sync_at,omitempty"`
MergedAt *time.Time `yaml:"merged_at,omitempty" json:"merged_at,omitempty"`
MergeStrategy string `yaml:"merge_strategy,omitempty" json:"merge_strategy,omitempty"`
}
```
## CLI Commands
```
sdlc init # Create .sdlc/ structure
sdlc state [--json] # Full state dump
sdlc feature create <slug> <title> # New feature
sdlc feature transition <slug> <phase> # Phase transition
sdlc feature block/unblock <slug> # Blocker management
sdlc artifact create/approve/reject # Artifact lifecycle
sdlc task add/start/complete/block # Task lifecycle
sdlc next [--for <feature>] [--json] [--execute] # Classifier output (--execute auto-runs transitions)
sdlc query blocked/ready/needs-approval # Queries
sdlc branch create/status/sync <slug> # Branch management
sdlc merge <slug> [--strategy squash] # Merge feature branch
sdlc archive <slug> # Archive released feature
```
## rdev API Endpoints
### SDLC State & Features (21 routes)
```
GET /projects/{id}/sdlc/state
GET /projects/{id}/sdlc/next?feature=slug
GET /projects/{id}/sdlc/features
POST /projects/{id}/sdlc/features
GET /projects/{id}/sdlc/features/{slug}
POST /projects/{id}/sdlc/features/{slug}/transition
POST /projects/{id}/sdlc/features/{slug}/block
POST /projects/{id}/sdlc/features/{slug}/unblock
DELETE /projects/{id}/sdlc/features/{slug}
GET /projects/{id}/sdlc/features/{slug}/artifacts
POST /projects/{id}/sdlc/features/{slug}/artifacts/{type}/approve
POST /projects/{id}/sdlc/features/{slug}/artifacts/{type}/reject
GET /projects/{id}/sdlc/features/{slug}/tasks
POST /projects/{id}/sdlc/features/{slug}/tasks
POST /projects/{id}/sdlc/features/{slug}/tasks/{taskId}/start
POST /projects/{id}/sdlc/features/{slug}/tasks/{taskId}/complete
POST /projects/{id}/sdlc/features/{slug}/tasks/{taskId}/block
POST /projects/{id}/sdlc/features/{slug}/branches
GET /projects/{id}/sdlc/features/{slug}/branches
POST /projects/{id}/sdlc/features/{slug}/branches/sync
POST /projects/{id}/sdlc/features/{slug}/merge
POST /projects/{id}/sdlc/features/{slug}/archive
GET /projects/{id}/sdlc/query/blocked
GET /projects/{id}/sdlc/query/ready
GET /projects/{id}/sdlc/query/needs-approval
```
### Orchestration (3 routes)
```
POST /projects/{id}/sdlc/execute # Run next classifier action (dispatches agents)
POST /projects/{id}/sdlc/resolve # Unblock feature and re-classify
POST /projects/{id}/sdlc/commit # Commit changes in pod
```
## Skeleton Template Commands (15)
Commands installed in every new project via skeleton template:
**Primary:** `spec-feature`, `design-feature`, `breakdown-feature`, `create-qa-plan`, `implement-task`, `review-feature`, `audit-feature`, `run-qa`, `next`, `deliver`
**Remediation:** `fix-review-issues`, `remediate-audit`, `fix-qa-failures`, `merge-feature`, `archive-feature`
## Related Topics
- [Kubernetes Adapter](./kubernetes.md) - Pod execution pattern (PodGitOperations)
- [Work Queue](./work-queue.md) - Task execution for agents
- [Worker Pool](./worker-pool.md) - Agent pool management