Internal

internal/app/config

Package config prepares evidence-backed workspace configuration proposals.

import "github.com/nilstate/scafld/v2/internal/app/config"

Package config prepares evidence-backed workspace configuration proposals.

Functions

func Run(ctx context.Context, scanner Scanner) (Output, error)

Source: internal/app/config/config.go:115

Run builds a deterministic proposal from scanner evidence.

Types

type AgentInstructions

Source: internal/app/config/config.go:80

AgentInstructions tells the consuming agent how to turn evidence into real project configuration without inventing unsupported runtime fields.

type AgentInstructions struct {
	Role         string   `json:"role" yaml:"role"`
	Deliverables []string `json:"deliverables" yaml:"deliverables"`
	Rules        []string `json:"rules" yaml:"rules"`
}
Fields
  • Role string `json:"role" yaml:"role"`
  • Deliverables []string `json:"deliverables" yaml:"deliverables"`
  • Rules []string `json:"rules" yaml:"rules"`

type CommandSuggestion

Source: internal/app/config/config.go:31

CommandSuggestion is an inferred validation command with source evidence.

type CommandSuggestion struct {
	ID      string   `json:"id" yaml:"id"`
	Command string   `json:"command" yaml:"command"`
	Sources []string `json:"sources" yaml:"sources"`
}
Fields
  • ID string `json:"id" yaml:"id"`
  • Command string `json:"command" yaml:"command"`
  • Sources []string `json:"sources" yaml:"sources"`

type ConfigPatch

Source: internal/app/config/config.go:88

ConfigPatch contains concrete changes that may be copied into config.yaml after review.

type ConfigPatch struct {
	Invariants map[string]string `json:"invariants" yaml:"invariants"`
	Execution  *ExecutionPatch   `json:"execution,omitempty" yaml:"execution,omitempty"`
}
Fields
  • Invariants map[string]string `json:"invariants" yaml:"invariants"`
  • Execution *ExecutionPatch `json:"execution,omitempty" yaml:"execution,omitempty"`

type Evidence

Source: internal/app/config/config.go:25

Evidence records one discovered project artifact.

type Evidence struct {
	Path string `json:"path" yaml:"path"`
	Role string `json:"role" yaml:"role"`
}
Fields
  • Path string `json:"path" yaml:"path"`
  • Role string `json:"role" yaml:"role"`

type ExecutionPatch

Source: internal/app/config/config.go:94

ExecutionPatch is the copyable runtime config fragment for acceptance commands.

type ExecutionPatch struct {
	PathPrepend []string          `json:"path_prepend,omitempty" yaml:"path_prepend,omitempty"`
	Env         map[string]string `json:"env,omitempty" yaml:"env,omitempty"`
}
Fields
  • PathPrepend []string `json:"path_prepend,omitempty" yaml:"path_prepend,omitempty"`
  • Env map[string]string `json:"env,omitempty" yaml:"env,omitempty"`

type ExecutionSuggestion

Source: internal/app/config/config.go:45

ExecutionSuggestion is an inferred acceptance-command environment.

type ExecutionSuggestion struct {
	PathPrepend []string          `json:"path_prepend,omitempty" yaml:"path_prepend,omitempty"`
	Env         map[string]string `json:"env,omitempty" yaml:"env,omitempty"`
	Sources     []string          `json:"sources" yaml:"sources"`
}
Fields
  • PathPrepend []string `json:"path_prepend,omitempty" yaml:"path_prepend,omitempty"`
  • Env map[string]string `json:"env,omitempty" yaml:"env,omitempty"`
  • Sources []string `json:"sources" yaml:"sources"`

type InvariantSuggestion

Source: internal/app/config/config.go:38

InvariantSuggestion is an inferred project invariant with source evidence.

type InvariantSuggestion struct {
	ID          string   `json:"id" yaml:"id"`
	Description string   `json:"description" yaml:"description"`
	Sources     []string `json:"sources" yaml:"sources"`
}
Fields
  • ID string `json:"id" yaml:"id"`
  • Description string `json:"description" yaml:"description"`
  • Sources []string `json:"sources" yaml:"sources"`

type Output

Source: internal/app/config/config.go:108

Output describes a config run.

type Output struct {
	Path     string   `json:"path"`
	Proposal Proposal `json:"proposal"`
	Prompt   string   `json:"prompt"`
}
Fields
  • Path string `json:"path"`
  • Proposal Proposal `json:"proposal"`
  • Prompt string `json:"prompt"`

type Proposal

Source: internal/app/config/config.go:67

Proposal is the written config proposal. It is intentionally not the runtime config schema; humans and agents must review it before applying changes.

type Proposal struct {
	Version           string            `json:"version" yaml:"version"`
	Purpose           string            `json:"purpose" yaml:"purpose"`
	AgentInstructions AgentInstructions `json:"agent_instructions" yaml:"agent_instructions"`
	Evidence          []Evidence        `json:"evidence" yaml:"evidence"`
	ConfigPatch       ConfigPatch       `json:"config_patch" yaml:"config_patch"`
	SpecGuidance      SpecGuidance      `json:"spec_guidance,omitempty" yaml:"spec_guidance,omitempty"`
	Warnings          []Warning         `json:"warnings,omitempty" yaml:"warnings,omitempty"`
	OpenQuestions     []Question        `json:"open_questions,omitempty" yaml:"open_questions,omitempty"`
}
Fields
  • Version string `json:"version" yaml:"version"`
  • Purpose string `json:"purpose" yaml:"purpose"`
  • AgentInstructions AgentInstructions `json:"agent_instructions" yaml:"agent_instructions"`
  • Evidence []Evidence `json:"evidence" yaml:"evidence"`
  • ConfigPatch ConfigPatch `json:"config_patch" yaml:"config_patch"`
  • SpecGuidance SpecGuidance `json:"spec_guidance,omitempty" yaml:"spec_guidance,omitempty"`
  • Warnings []Warning `json:"warnings,omitempty" yaml:"warnings,omitempty"`
  • OpenQuestions []Question `json:"open_questions,omitempty" yaml:"open_questions,omitempty"`

type Question

Source: internal/app/config/config.go:52

Question records a missing policy decision that could not be inferred.

type Question struct {
	Question string   `json:"question" yaml:"question"`
	Reason   string   `json:"reason" yaml:"reason"`
	Sources  []string `json:"sources,omitempty" yaml:"sources,omitempty"`
}
Fields
  • Question string `json:"question" yaml:"question"`
  • Reason string `json:"reason" yaml:"reason"`
  • Sources []string `json:"sources,omitempty" yaml:"sources,omitempty"`

type Scanner

Source: internal/app/config/config.go:9

Scanner inspects a workspace without mutating it.

type Scanner interface {
	Scan(context.Context) (Snapshot, error)
}
Methods
  • Scan func(context.Context) (Snapshot, error)

type Snapshot

Source: internal/app/config/config.go:14

Snapshot is the evidence discovered from a workspace.

type Snapshot struct {
	Root       string
	Files      []Evidence
	Commands   []CommandSuggestion
	Invariants []InvariantSuggestion
	Execution  *ExecutionSuggestion
	Warnings   []Warning
	Questions  []Question
}
Fields
  • Root string
  • Files []Evidence
  • Commands []CommandSuggestion
  • Invariants []InvariantSuggestion
  • Execution *ExecutionSuggestion
  • Warnings []Warning
  • Questions []Question

type SpecGuidance

Source: internal/app/config/config.go:101

SpecGuidance contains repo facts useful to future specs, but not read from runtime config.

type SpecGuidance struct {
	Commands    []CommandSuggestion   `json:"commands,omitempty" yaml:"commands,omitempty"`
	ReviewFocus []InvariantSuggestion `json:"review_focus,omitempty" yaml:"review_focus,omitempty"`
	Execution   *ExecutionSuggestion  `json:"execution,omitempty" yaml:"execution,omitempty"`
}
Fields
  • Commands []CommandSuggestion `json:"commands,omitempty" yaml:"commands,omitempty"`
  • ReviewFocus []InvariantSuggestion `json:"review_focus,omitempty" yaml:"review_focus,omitempty"`
  • Execution *ExecutionSuggestion `json:"execution,omitempty" yaml:"execution,omitempty"`

type Warning

Source: internal/app/config/config.go:59

Warning records stale or suspicious project config state.

type Warning struct {
	ID      string   `json:"id" yaml:"id"`
	Message string   `json:"message" yaml:"message"`
	Sources []string `json:"sources,omitempty" yaml:"sources,omitempty"`
}
Fields
  • ID string `json:"id" yaml:"id"`
  • Message string `json:"message" yaml:"message"`
  • Sources []string `json:"sources,omitempty" yaml:"sources,omitempty"`