internal/adapters/config
import "github.com/nilstate/scafld/v2/internal/adapters/config"
Package config loads and merges scafld workspace configuration files.
Constants
Source: internal/adapters/config/config.go:20
const (
// DefaultCodexModel is empty by design: scafld omits -m for the "latest"
// Codex model path so Codex CLI can use its own current default.
DefaultCodexModel = ""
// DefaultCodexModelReasoningEffort keeps governed review/harden runs from
// inheriting a medium-effort CLI default after user config is isolated.
DefaultCodexModelReasoningEffort = "xhigh"
// DefaultClaudeModel is empty by design: scafld omits --model so Claude Code
// can use its own current default unless the workspace explicitly pins one.
DefaultClaudeModel = ""
// DefaultClaudeEffort uses Claude Code's native effort control for governed
// review/harden runs.
DefaultClaudeEffort = "xhigh"
)Functions
func Default() Config
Source: internal/adapters/config/config.go:291
Default returns the built-in workspace configuration.
func DetectExecution(root string) ExecutionDetection
Source: internal/adapters/config/toolchain.go:22
DetectExecution infers safe PATH additions from checked-in toolchain files.
Detection is intentionally limited to version-manager shim directories. It does not run shell startup files or infer per-command state. Project config remains the place for explicit environment variables and policy.
func EffectiveEvidenceRoots(root string, cfg WorkspaceConfig) []string
Source: internal/adapters/config/config.go:654
EffectiveEvidenceRoots returns the absolute roots under which harden/review evidence may be read or cited. The primary scafld root is always first.
func EffectiveExecution(root string, explicit ExecutionConfig) ExecutionConfig
Source: internal/adapters/config/toolchain.go:46
EffectiveExecution merges auto-detected toolchain shims behind explicit config. Explicit config paths appear first in PATH and explicit environment keys override detected values.
func Load(ctx context.Context, root string) (Config, error)
Source: internal/adapters/config/config.go:186
Load reads base config and local overrides from root.
func LoadBase(ctx context.Context, root string) (Config, error)
Source: internal/adapters/config/config.go:210
LoadBase reads only the committed base config, ignoring config.local overrides. The gate and verify paths use this so a host-committed config.local.yaml cannot repoint the trust anchor, relax the independence policy, or redirect reviewer endpoints. config.local stays an authoring convenience for the human lifecycle, never an input to the accountability gate.
func ValidVerifyPolicy(policy string) bool
Source: internal/adapters/config/config.go:506
ValidVerifyPolicy reports whether policy is a supported verify enforcement tier.
Types
type ClaudeProviderConfig
Source: internal/adapters/config/config.go:164
ClaudeProviderConfig configures the Claude Code adapter.
type ClaudeProviderConfig struct {
ProviderConfig `yaml:",inline"`
Effort string `yaml:"effort"`
}Fields
ProviderConfig`yaml:",inline"`Effort string`yaml:"effort"`
type CodexProviderConfig
Source: internal/adapters/config/config.go:157
CodexProviderConfig configures the Codex CLI adapter. ModelReasoningEffort is intentionally Codex-specific; other provider thinking controls need their own verified adapter fields before scafld exposes them.
type CodexProviderConfig struct {
ProviderConfig `yaml:",inline"`
ModelReasoningEffort string `yaml:"model_reasoning_effort"`
}Fields
ProviderConfig`yaml:",inline"`ModelReasoningEffort string`yaml:"model_reasoning_effort"`
type Config
Source: internal/adapters/config/config.go:59
Config is the merged runtime configuration for a scafld workspace.
type Config struct {
Version string `yaml:"version"`
Workspace WorkspaceConfig `yaml:"workspace"`
Invariants InvariantConfig `yaml:"invariants"`
LLM LLMConfig `yaml:"llm"`
Execution ExecutionConfig `yaml:"execution"`
Verify VerifyConfig `yaml:"verify"`
Harden HardenConfig `yaml:"harden"`
Review ReviewConfig `yaml:"review"`
}Fields
Version string`yaml:"version"`Workspace WorkspaceConfig`yaml:"workspace"`Invariants InvariantConfig`yaml:"invariants"`LLM LLMConfig`yaml:"llm"`Execution ExecutionConfig`yaml:"execution"`Verify VerifyConfig`yaml:"verify"`Harden HardenConfig`yaml:"harden"`Review ReviewConfig`yaml:"review"`
type ExecutionConfig
Source: internal/adapters/config/config.go:90
ExecutionConfig controls the deterministic environment for acceptance commands.
type ExecutionConfig struct {
PathPrepend []string `yaml:"path_prepend"`
Env map[string]string `yaml:"env"`
AbsoluteTimeoutSeconds int `yaml:"absolute_timeout_seconds"`
IdleTimeoutSeconds int `yaml:"idle_timeout_seconds"`
}Fields
PathPrepend []string`yaml:"path_prepend"`Env map[string]string`yaml:"env"`AbsoluteTimeoutSeconds int`yaml:"absolute_timeout_seconds"`IdleTimeoutSeconds int`yaml:"idle_timeout_seconds"`
func AbsoluteTimeout() time.Duration
Source: internal/adapters/config/config.go:758
AbsoluteTimeout returns the configured per-acceptance-command wall clock cap.
func IdleTimeout() time.Duration
Source: internal/adapters/config/config.go:766
IdleTimeout returns the configured idle-output watchdog duration.
func ProcessEnv() []string
Source: internal/adapters/config/config.go:722
ProcessEnv returns stable process environment overrides for acceptance commands.
type ExecutionDetection
Source: internal/adapters/config/toolchain.go:12
ExecutionDetection records repo-declared toolchain hints that can make non-login acceptance shells behave like the checked-in project expects.
type ExecutionDetection struct {
Execution ExecutionConfig
Sources []string
}Fields
Execution ExecutionConfigSources []string
type ExternalReviewConfig
Source: internal/adapters/config/config.go:142
ExternalReviewConfig configures external model-provider review execution.
type ExternalReviewConfig struct {
Provider string `yaml:"provider"`
Command string `yaml:"command"`
ProviderBinary string `yaml:"provider_binary"`
IdleTimeoutSeconds int `yaml:"idle_timeout_seconds"`
AbsoluteMaxSeconds int `yaml:"absolute_max_seconds"`
FallbackPolicy string `yaml:"fallback_policy"`
Codex CodexProviderConfig `yaml:"codex"`
Claude ClaudeProviderConfig `yaml:"claude"`
Gemini ProviderConfig `yaml:"gemini"`
}Fields
Provider string`yaml:"provider"`Command string`yaml:"command"`ProviderBinary string`yaml:"provider_binary"`IdleTimeoutSeconds int`yaml:"idle_timeout_seconds"`AbsoluteMaxSeconds int`yaml:"absolute_max_seconds"`FallbackPolicy string`yaml:"fallback_policy"`Codex CodexProviderConfig`yaml:"codex"`Claude ClaudeProviderConfig`yaml:"claude"`Gemini ProviderConfig`yaml:"gemini"`
type HardenConfig
Source: internal/adapters/config/config.go:110
HardenConfig controls hardening prompt behavior.
type HardenConfig struct {
MaxIssuesPerRound int `yaml:"max_issues_per_round"`
ContextMaxBytes int `yaml:"context_max_bytes"`
RequiredContextMaxBytes int `yaml:"required_context_max_bytes"`
External ExternalReviewConfig `yaml:"external"`
}Fields
MaxIssuesPerRound int`yaml:"max_issues_per_round"`ContextMaxBytes int`yaml:"context_max_bytes"`RequiredContextMaxBytes int`yaml:"required_context_max_bytes"`External ExternalReviewConfig`yaml:"external"`
type InvariantConfig
Source: internal/adapters/config/config.go:80
InvariantConfig names project-level invariant IDs available to specs.
type InvariantConfig struct {
Canonical map[string]string `yaml:"canonical"`
}Fields
Canonical map[string]string`yaml:"canonical"`
type LLMConfig
Source: internal/adapters/config/config.go:85
LLMConfig contains shared model-profile settings.
type LLMConfig struct {
ModelProfile string `yaml:"model_profile"`
}Fields
ModelProfile string`yaml:"model_profile"`
type ProviderConfig
Source: internal/adapters/config/config.go:171
ProviderConfig configures a named external provider implementation.
type ProviderConfig struct {
Model string `yaml:"model"`
Binary string `yaml:"binary"`
EndpointURL string `yaml:"endpoint_url"`
EndpointHost string `yaml:"endpoint_host"`
}Fields
Model string`yaml:"model"`Binary string`yaml:"binary"`EndpointURL string`yaml:"endpoint_url"`EndpointHost string`yaml:"endpoint_host"`
type ReviewConfig
Source: internal/adapters/config/config.go:118
ReviewConfig controls automated and adversarial review behavior.
type ReviewConfig struct {
External ExternalReviewConfig `yaml:"external"`
Context ReviewContextConfig `yaml:"context"`
Dossier ReviewDossierConfig `yaml:"dossier"`
AutomatedPasses map[string]ReviewPassConfig `yaml:"automated_passes"`
AdversarialPasses map[string]ReviewPassConfig `yaml:"adversarial_passes"`
}Fields
External ExternalReviewConfig`yaml:"external"`Context ReviewContextConfig`yaml:"context"`Dossier ReviewDossierConfig`yaml:"dossier"`AutomatedPasses map[string]ReviewPassConfig`yaml:"automated_passes"`AdversarialPasses map[string]ReviewPassConfig`yaml:"adversarial_passes"`
type ReviewContextConfig
Source: internal/adapters/config/config.go:135
ReviewContextConfig controls bounded project context sent to reviewers.
type ReviewContextConfig struct {
MaxBytes int `yaml:"max_bytes"`
RequiredMaxBytes int `yaml:"required_max_bytes"`
Files []string `yaml:"files"`
}Fields
MaxBytes int`yaml:"max_bytes"`RequiredMaxBytes int`yaml:"required_max_bytes"`Files []string`yaml:"files"`
type ReviewDossierConfig
Source: internal/adapters/config/config.go:127
ReviewDossierConfig controls default review dossier budget and rerun behavior.
type ReviewDossierConfig struct {
MaxFindings int `yaml:"max_findings"`
MinAttackAngles int `yaml:"min_attack_angles"`
ReviewDepth string `yaml:"review_depth"`
RerunPolicy string `yaml:"rerun_policy"`
}Fields
MaxFindings int`yaml:"max_findings"`MinAttackAngles int`yaml:"min_attack_angles"`ReviewDepth string`yaml:"review_depth"`RerunPolicy string`yaml:"rerun_policy"`
type ReviewPassConfig
Source: internal/adapters/config/config.go:179
ReviewPassConfig describes one review pass in the review agenda.
type ReviewPassConfig struct {
Order int `yaml:"order"`
Title string `yaml:"title"`
Description string `yaml:"description"`
}Fields
Order int`yaml:"order"`Title string`yaml:"title"`Description string`yaml:"description"`
type VerifyConfig
Source: internal/adapters/config/config.go:98
VerifyConfig controls CI receipt verification defaults.
type VerifyConfig struct {
MinIndependence string `yaml:"min_independence"`
TrustedKeysPath string `yaml:"trusted_keys_path"`
ReceiptPath string `yaml:"receipt_path"`
// Policy declares the operator's intended enforcement tier (local, advisory,
// required). It is reporting-only metadata: it is read by `scafld verify
// --self-check` and the docs framing, never by the receipt-verification
// verdict path, so a tier can never bypass a real check.
Policy string `yaml:"policy"`
}Fields
MinIndependence string`yaml:"min_independence"`TrustedKeysPath string`yaml:"trusted_keys_path"`ReceiptPath string`yaml:"receipt_path"`Policy string`yaml:"policy"`Policy declares the operator's intended enforcement tier (local, advisory, required). It is reporting-only metadata: it is read by
scafld verify --self-checkand the docs framing, never by the receipt-verification verdict path, so a tier can never bypass a real check.
type WorkspaceConfig
Source: internal/adapters/config/config.go:72
WorkspaceConfig describes the local filesystem boundary scafld should treat as part of the project evidence surface.
type WorkspaceConfig struct {
// EvidenceRoots are additional roots, relative to the scafld root unless
// absolute, whose files may be cited by harden/review evidence. The scafld
// root is always included.
EvidenceRoots []string `yaml:"evidence_roots"`
}Fields
EvidenceRoots []string`yaml:"evidence_roots"`EvidenceRoots are additional roots, relative to the scafld root unless absolute, whose files may be cited by harden/review evidence. The scafld root is always included.
