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 ¶
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 ¶
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 ¶
func (s *SpecFile) MarkVerifying()
MarkVerifying sets the spec status to verifying.
func (*SpecFile) SetBranchIfEmpty ¶
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 ¶
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 ( // StatusDraft indicates the spec has been written but not yet reviewed. StatusDraft Status = "draft" // StatusApproved indicates the spec has been reviewed and approved. StatusApproved Status = "approved" // StatusPrompted indicates prompts have been generated from the spec. StatusPrompted Status = "prompted" // StatusVerifying indicates all prompts completed, awaiting human verification. StatusVerifying Status = "verifying" // StatusCompleted indicates human verified all acceptance criteria. StatusCompleted Status = "completed" )