Documentation
¶
Overview ¶
Package spec handles specification file loading, status management, and listing.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func AutoBranchName ¶ added in v0.39.0
AutoBranchName generates a canonical branch name from a spec file's basename (without .md extension). If the name has a numeric prefix, it returns "dark-factory/spec-NNN". Otherwise it returns "dark-factory/" + sanitized name.
func NormalizeSpecFilename ¶ added in v0.26.0
NormalizeSpecFilename assigns a sequential numeric prefix to name if it does not already have one. Scans all given dirs for .md files, finds the highest existing numeric prefix across all dirs, and returns fmt.Sprintf("%03d-%s", highest+1, name) for unnumbered names. If name already has a valid numeric prefix, it is returned unchanged.
Types ¶
type AutoCompleter ¶
AutoCompleter checks if all linked prompts are completed and marks the spec as completed.
func NewAutoCompleter ¶
func NewAutoCompleter( queueDir, completedDir, specsInboxDir, specsInProgressDir, specsCompletedDir string, currentDateTimeGetter libtime.CurrentDateTimeGetter, projectName string, n notifier.Notifier, ) AutoCompleter
NewAutoCompleter creates a new AutoCompleter.
type Frontmatter ¶
type Frontmatter struct {
Status string `yaml:"status"`
Tags []string `yaml:"tags,omitempty"`
Approved string `yaml:"approved,omitempty"`
Prompted string `yaml:"prompted,omitempty"`
Verifying string `yaml:"verifying,omitempty"`
Completed string `yaml:"completed,omitempty"`
Branch string `yaml:"branch,omitempty"`
Issue string `yaml:"issue,omitempty"`
}
Frontmatter represents the YAML frontmatter in a spec file.
type Lister ¶
type Lister interface {
List(ctx context.Context) ([]*SpecFile, error)
Summary(ctx context.Context) (*Summary, error)
}
Lister lists spec files from a directory.
type SpecFile ¶
type SpecFile struct {
Path string
Frontmatter Frontmatter
Name string // filename without extension
Body []byte
// contains filtered or unexported fields
}
SpecFile represents a loaded spec file with frontmatter and body.
func Load ¶
func Load( ctx context.Context, path string, currentDateTimeGetter libtime.CurrentDateTimeGetter, ) (*SpecFile, error)
Load reads a spec file from disk, parsing frontmatter and body.
func (*SpecFile) MarkCompleted ¶
func (s *SpecFile) MarkCompleted()
MarkCompleted sets the spec status to completed.
func (*SpecFile) MarkVerifying ¶ added in v0.18.5
func (s *SpecFile) MarkVerifying()
MarkVerifying sets the spec status to verifying.
func (*SpecFile) SetBranchIfEmpty ¶ added in v0.39.0
SetBranchIfEmpty sets the branch in the frontmatter only if it is not already set.
func (*SpecFile) SetStatus ¶
SetStatus sets the status field in the frontmatter and stamps the matching timestamp once.
func (*SpecFile) SpecNumber ¶ added in v0.23.1
SpecNumber returns the numeric prefix of the spec file name. Returns -1 if the name has no numeric prefix.
type Status ¶
type Status string
Status represents the lifecycle state of a spec.
const ( // StatusIdea indicates a rough concept that needs refinement before it can be reviewed. StatusIdea Status = "idea" // StatusDraft indicates the spec is complete and ready for human review and approval. StatusDraft Status = "draft" // StatusApproved indicates the spec has been reviewed and approved for prompt generation. StatusApproved Status = "approved" // StatusPrompted indicates prompts have been generated from the spec. StatusPrompted Status = "prompted" // StatusVerifying indicates all linked prompts completed, awaiting human verification of acceptance criteria. StatusVerifying Status = "verifying" // StatusCompleted indicates human verified all acceptance criteria are met. StatusCompleted Status = "completed" )
type Summary ¶
type Summary struct {
Idea int
Draft int
Approved int
Prompted int
Verifying int
Completed int
Total int
LinkedPromptsCompleted int `json:"linked_prompts_completed,omitempty"`
LinkedPromptsTotal int `json:"linked_prompts_total,omitempty"`
}
Summary holds counts of specs grouped by status.