Documentation
¶
Index ¶
- func ComputeFingerprint(reads []FieldRef, msg proto.Message) string
- func ToCachedResults(results []Result, evaluatedAt time.Time) map[string]CachedResult
- func Validate(cfg *EvalConfig, input proto.Message) error
- func ValidateConfig(cfg *EvalConfig) error
- type CELEvaluator
- func (e *CELEvaluator) CacheTTL() time.Duration
- func (e *CELEvaluator) Category() string
- func (e *CELEvaluator) DisplayName() string
- func (e *CELEvaluator) Evaluate(activation map[string]any) Result
- func (e *CELEvaluator) EvaluatePreconditions(activation map[string]any) []string
- func (e *CELEvaluator) FailureMode() string
- func (e *CELEvaluator) HasPreconditions() bool
- func (e *CELEvaluator) Name() string
- func (e *CELEvaluator) Reads() []FieldRef
- func (e *CELEvaluator) Resolution() string
- func (e *CELEvaluator) ResolutionWorkflow() string
- func (e *CELEvaluator) Severity() string
- func (e *CELEvaluator) Writes() FieldRef
- type CachedResult
- type Engine
- func (e *Engine) DeriveStatus(results []Result) Status
- func (e *Engine) Evaluators() []Evaluator
- func (e *Engine) Graph() *EvalGraph
- func (e *Engine) InputFields(name string) []string
- func (e *Engine) Run(input proto.Message) []Result
- func (e *Engine) RunMap(input proto.Message) map[string]Result
- func (e *Engine) RunWithCache(input proto.Message, cache map[string]CachedResult, now time.Time) ([]Result, map[string]bool)
- func (e *Engine) RunWithCacheMap(input proto.Message, cache map[string]CachedResult, now time.Time) (map[string]Result, map[string]bool)
- func (e *Engine) ToCachedResults(results []Result, input proto.Message, evaluatedAt time.Time) map[string]CachedResult
- type EvalConfig
- type EvalDefinition
- type EvalGraph
- func (g *EvalGraph) BlockedBy(name string, results map[string]Result) []string
- func (g *EvalGraph) Blocks(name string) []string
- func (g *EvalGraph) DependenciesMet(name string, results map[string]Result) bool
- func (g *EvalGraph) ExecutionOrder() []string
- func (g *EvalGraph) Issues() []Issue
- func (g *EvalGraph) MaxDepth() int
- type Evaluator
- type FieldRef
- type Issue
- type Precondition
- type Result
- type Status
- type ValidationError
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func ComputeFingerprint ¶
ComputeFingerprint hashes the values of the declared input fields from the given proto message. If the hash matches a cached value, the previous evaluation result can be reused.
func ToCachedResults ¶ added in v0.2.0
func ToCachedResults(results []Result, evaluatedAt time.Time) map[string]CachedResult
ToCachedResults converts a slice of results into a cache map keyed by name, stamped with the given evaluation time. No fingerprints are computed; use Engine.ToCachedResults for fingerprint-aware caching.
func Validate ¶ added in v0.5.0
func Validate(cfg *EvalConfig, input proto.Message) error
Validate performs full validation: structural checks followed by CEL compilation and dependency graph construction. This catches everything ValidateConfig catches plus invalid CEL expressions, type mismatches, circular dependencies, and missing producers.
func ValidateConfig ¶ added in v0.5.0
func ValidateConfig(cfg *EvalConfig) error
ValidateConfig performs structural validation on an EvalConfig without requiring a proto message. It checks required fields, duplicate writes, cache_ttl format, and precondition expressions.
Types ¶
type CELEvaluator ¶
type CELEvaluator struct {
// contains filtered or unexported fields
}
CELEvaluator implements Evaluator using a compiled CEL program.
func NewCELEvaluator ¶
func NewCELEvaluator(env *cel.Env, def EvalDefinition) (*CELEvaluator, error)
NewCELEvaluator compiles a CEL expression and returns an evaluator.
func (*CELEvaluator) CacheTTL ¶
func (e *CELEvaluator) CacheTTL() time.Duration
func (*CELEvaluator) Category ¶ added in v0.4.0
func (e *CELEvaluator) Category() string
func (*CELEvaluator) DisplayName ¶ added in v0.4.0
func (e *CELEvaluator) DisplayName() string
func (*CELEvaluator) EvaluatePreconditions ¶ added in v0.4.0
func (e *CELEvaluator) EvaluatePreconditions(activation map[string]any) []string
EvaluatePreconditions runs all precondition programs against the activation. Returns the descriptions of preconditions that evaluated to false (or errored). If a precondition has no description, the expression is returned instead.
func (*CELEvaluator) FailureMode ¶ added in v0.4.0
func (e *CELEvaluator) FailureMode() string
func (*CELEvaluator) HasPreconditions ¶ added in v0.4.0
func (e *CELEvaluator) HasPreconditions() bool
func (*CELEvaluator) Name ¶
func (e *CELEvaluator) Name() string
Interface accessors — these expose definition metadata through the Evaluator interface so that execute() never needs to type-assert to *CELEvaluator.
func (*CELEvaluator) Reads ¶
func (e *CELEvaluator) Reads() []FieldRef
func (*CELEvaluator) Resolution ¶ added in v0.4.0
func (e *CELEvaluator) Resolution() string
func (*CELEvaluator) ResolutionWorkflow ¶
func (e *CELEvaluator) ResolutionWorkflow() string
func (*CELEvaluator) Severity ¶ added in v0.4.0
func (e *CELEvaluator) Severity() string
func (*CELEvaluator) Writes ¶
func (e *CELEvaluator) Writes() FieldRef
type CachedResult ¶ added in v0.2.0
type CachedResult struct {
Result Result
EvaluatedAt time.Time
Fingerprint string // hash of proto input fields; empty if not computed
}
CachedResult wraps a Result with the time it was evaluated and an optional fingerprint of the input fields used to produce it. The caller owns persistence — the engine is stateless.
type Engine ¶
type Engine struct {
// contains filtered or unexported fields
}
Engine loads evaluation definitions, compiles CEL expressions, builds the dependency graph, and runs all evaluators against a proto input.
func NewEngine ¶
NewEngine creates an evaluation engine from a config and a proto message that serves as the input type. The proto is registered in the CEL environment as the variable "input" — YAML expressions reference fields as "input.<field>". Extra opts are forwarded to NewCELEnvironment for additional declarations.
func NewEngineFromBytes ¶
NewEngineFromBytes loads evaluation definitions from raw YAML bytes.
func NewEngineFromFile ¶
NewEngineFromFile loads evaluation definitions from a YAML file.
func (*Engine) DeriveStatus ¶
DeriveStatus derives the overall status from evaluation results.
func (*Engine) Evaluators ¶
Evaluators returns all registered evaluators.
func (*Engine) InputFields ¶ added in v0.4.0
InputFields returns the input field paths referenced in the evaluator's CEL expression, extracted from the compiled AST. Only returns paths rooted at "input." (e.g. "input.score", "input.nested_object.is_active").
func (*Engine) Run ¶
Run executes all evaluators in dependency order against the given input. The proto is bound to the "input" CEL variable. Upstream evaluator results are injected by their writes-field name for downstream expressions.
func (*Engine) RunWithCache ¶ added in v0.2.0
func (e *Engine) RunWithCache(input proto.Message, cache map[string]CachedResult, now time.Time) ([]Result, map[string]bool)
RunWithCache executes evaluators, reusing cached results that are still within their CacheTTL. The caller owns the cache — the engine is stateless. Pass time.Now() as now; a zero now disables caching (equivalent to Run). Returns the full result set and a map indicating which evaluators were served from cache (true = reused, absent = re-evaluated).
func (*Engine) RunWithCacheMap ¶ added in v0.2.0
func (e *Engine) RunWithCacheMap(input proto.Message, cache map[string]CachedResult, now time.Time) (map[string]Result, map[string]bool)
RunWithCacheMap is like RunWithCache but returns results indexed by name.
func (*Engine) ToCachedResults ¶ added in v0.2.0
func (e *Engine) ToCachedResults(results []Result, input proto.Message, evaluatedAt time.Time) map[string]CachedResult
ToCachedResults converts results into a cache map with fingerprints computed from the evaluator's input reads and the proto message.
type EvalConfig ¶
type EvalConfig struct {
Evaluations []EvalDefinition `yaml:"evaluations"`
}
EvalConfig is the top-level YAML structure.
func LoadDefinitions ¶
func LoadDefinitions(r io.Reader) (*EvalConfig, error)
LoadDefinitions parses evaluation definitions from a reader.
func LoadDefinitionsFromFile ¶
func LoadDefinitionsFromFile(path string) (*EvalConfig, error)
LoadDefinitionsFromFile loads evaluation definitions from a YAML file.
type EvalDefinition ¶
type EvalDefinition struct {
Name string `yaml:"name"`
Description string `yaml:"description"`
Expression string `yaml:"expression"`
Reads []FieldRef `yaml:"reads"`
Writes FieldRef `yaml:"writes"`
ResolutionWorkflow string `yaml:"resolution_workflow"`
Resolution string `yaml:"resolution"`
Severity string `yaml:"severity"`
Category string `yaml:"category"`
FailureMode string `yaml:"failure_mode"`
Preconditions []Precondition `yaml:"preconditions"`
CacheTTL string `yaml:"cache_ttl"`
CacheTTLDuration time.Duration `yaml:"-"`
}
EvalDefinition is a single evaluator loaded from YAML.
type EvalGraph ¶
type EvalGraph struct {
// contains filtered or unexported fields
}
EvalGraph holds the auto-calculated dependency graph derived from evaluator reads/writes declarations.
func BuildGraph ¶
BuildGraph derives the dependency graph from evaluator declarations. Reads prefixed with "input." are treated as raw proto field references — no producer dependency is created for them.
func (*EvalGraph) BlockedBy ¶
BlockedBy returns the names of upstream evaluators that have not passed.
func (*EvalGraph) Blocks ¶ added in v0.4.0
Blocks returns the names of evaluators that directly depend on the given evaluator (reverse dependency lookup).
func (*EvalGraph) DependenciesMet ¶
DependenciesMet returns true if all upstream dependencies of the given evaluator have passed.
func (*EvalGraph) ExecutionOrder ¶
ExecutionOrder returns the topologically sorted evaluator names.
type Evaluator ¶
type Evaluator interface {
Name() string
DisplayName() string
Reads() []FieldRef
Writes() FieldRef
CacheTTL() time.Duration
Resolution() string
ResolutionWorkflow() string
Severity() string
Category() string
FailureMode() string
HasPreconditions() bool
EvaluatePreconditions(activation map[string]any) []string
Evaluate(activation map[string]any) Result
}
Evaluator is the interface for all evaluators.
type FieldRef ¶
type FieldRef string
FieldRef is a dependency reference — either an evaluator output (bare name like "score_sufficient") or an input field path (like "input.email_verified"). Reads prefixed with "input." refer to the proto passed to Engine.Run.
type Issue ¶
type Issue struct {
Type string // "circular_dependency", "missing_producer", "duplicate_producer", "orphan_output"
Severity string // "error", "warning", "info"
Message string
}
Issue represents a validation issue found in the dependency graph.
type Precondition ¶ added in v0.4.0
type Precondition struct {
Expression string `yaml:"expression"`
Description string `yaml:"description"`
}
Precondition is a CEL expression that must evaluate to true before the main expression runs. If it fails, the evaluator is marked Pending rather than Failed.
type Result ¶
type Result struct {
Name string
DisplayName string
Passed bool
Pending bool
Error string
Resolution string
ResolutionWorkflow string
Severity string
Category string
FailureMode string
PendingPreconditions []string
}
Result represents the outcome of a single evaluator run.
type Status ¶
type Status string
Status represents the logical outcome of evaluating all results.
const ( StatusAllPassed Status = "StatusAllPassed" // every evaluation passed StatusWorkflowActive Status = "StatusWorkflowActive" // a resolution workflow is running StatusActionRequired Status = "StatusActionRequired" // a failing eval needs manual action StatusPending Status = "StatusPending" // a failing eval is pending preconditions StatusBlocked Status = "StatusBlocked" // a failing eval's dependencies aren't met )
func DeriveStatus ¶
DeriveStatus determines the overall status from evaluation results. Status is derived, never stored directly — it reflects the current state of all evaluations.
type ValidationError ¶ added in v0.5.0
type ValidationError struct {
Errors []string
}
ValidationError collects multiple validation issues.
func (*ValidationError) Error ¶ added in v0.5.0
func (e *ValidationError) Error() string
Source Files
¶
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
evalvalidate
command
evalvalidate validates evalengine YAML configuration files.
|
evalvalidate validates evalengine YAML configuration files. |
|
proto
|
|