Workstream: Engine · Part of #89
Context
Per the #91 decision, we build our own minimal CEL evaluator over DynamicValue — no upstream/vendored crate, no Cedar. First piece: the parser.
Scope
- New crate
crates/schema-forge-cel.
- Lexer + parser for the CEL expression grammar (cel-spec langdef /
Cel.g4) → a typed Rust AST.
- Cover the surface the rules engine needs: literals (incl. uint/bytes/duration/timestamp forms), identifiers, field selection, indexing, function & method calls, unary/binary/ternary operators, list/map construction, and macro call syntax (
has, all, exists, exists_one, map, filter).
- Parse errors with position info.
Acceptance
Dependencies: Built against the #90 oracle (parse section). Blocks the evaluator core. Soft.
Workstream: Engine · Part of #89
Context
Per the #91 decision, we build our own minimal CEL evaluator over
DynamicValue— no upstream/vendored crate, no Cedar. First piece: the parser.Scope
crates/schema-forge-cel.Cel.g4) → a typed Rust AST.has,all,exists,exists_one,map,filter).Acceptance
parsesection of the Spike: measure pure-Rust CEL conformance against the official cel-spec suite #90 conformance oracle.Dependencies: Built against the #90 oracle (parse section). Blocks the evaluator core. Soft.