Defines the ValidationEngine trait and orchestrates the full validation pipeline: schema validation → engine rule
evaluation → Step Functions validation → diagnostic enrichment → filtering → report assembly. Engine-agnostic - any
engine (rego-engine, cel-engine) implements the trait and plugs
into this pipeline.
See API.md for usage examples and public API reference.
bytes ──▶ SemanticModel ──▶ validate()
│
┌────────────┼────────────────────────┐
▼ ▼ ▼
SchemaValidator engine.evaluate_rules() step_functions
(Fatal schema (Error/Warn/Info ::validate_all
violations) lint rules) _state_machines()
│ │ │
└────────────┼────────────────────────┘
▼
merge + enrich + filter + report
│
▼
ValidationReport
pub trait ValidationEngine {
fn engine_name(&self) -> &str;
fn evaluate_rules(&self, model: &Arc<SemanticModel>, config: &ValidateConfig)
-> Result<Vec<Diagnostic>, ValidationError>;
fn list_rules(&self) -> Vec<RuleInfo>;
fn rule_metadata(&self) -> &HashMap<String, RuleMetadataEntry>;
fn external_rule_metadata(&self) -> HashMap<String, RuleMetadataEntry>;
fn init_metric(&self) -> &PhaseMetric;
}Engines implement evaluate_rules to run their rule evaluation logic against
the SemanticModel. The orchestration pipeline handles everything else.
- Schema validation - Fatal-severity diagnostics for structural violations.
- Engine rule evaluation - Error/Warning/Info diagnostics from lint rules.
- Step Functions validation - Validates
AWS::StepFunctions::StateMachinedefinitions (ruleE3601): StartAt references, state types, required fields, JSONata mode restrictions, recursive into Parallel/Map. - Model diagnostics - Parse-time diagnostics (duplicate keys, cycles, structure errors).
- Enrichment - Adds section, phase, rule description. For
Detailedlevel, attaches resolved property values and schema constraints as context. - Finalization - Applies include/exclude filters, severity gating, strict mode (Warn→Error), sorts by source location, deduplicates.
- Report assembly - Severity counts, metadata, per-phase performance metrics.
Parse error handling: When validate_bytes_with_path encounters a parse failure, it creates a synthetic F1101
diagnostic and returns a ValidationReport with status=Error rather than returning Err.