You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
cel: profile 2026.1's semantics are pinned by a function listing and an examples corpus, not by the language's own conformance suite — cel.dev/expr already ships the textproto cases for every library the profile admits, and it is already in go.mod #1509
What pins the meaning of an expression across a cel-go bump today: docs/reference/cel.md (which functions exist), TestEveryDocumentedCELIdiomCompiles (that documented idioms parse), the shared conformance corpus (Flowstate's own value cases), and #1358's version pins (which functions a library declares). None of them asserts what 1 == 1.0, 'a'.matches('.*'), optional.none().orValue(1) or [1,2].sortBy(v, -v)evaluate to — the semantics #1432 found split between checker and runtime, and the kind of thing cel-expr/cel-go#1377 and #1328 are changing upstream right now.
The language's own suite exists and is already a dependency. cel.dev/expr v0.25.2 (go.mod:63, indirect) ships tests/simple/testdata/*.textproto — basic, comparisons, conversions, dynamic, fields, fp_math, integer_math, lists, logic, macros, macros2, optionals, string, timestamps, unknowns, plus per-extension files bindings_ext, encoders_ext, math_ext, string_ext, block_ext, network_ext — with a Go package cel.dev/expr/conformance/test (simple.pb.go, suite.pb.go) that decodes them. cel-go's own runner is conformance/conformance_test.go at f8478f1, which selects files per library and carries a skip list for known divergences.
Two things make running it here more than a formality: Flowstate evaluates parsed ASTs (#1481), which the suite exercises in its unchecked mode and cel-go's own CI exercises less; and Flowstate wraps every comprehension range in flowstate.@orderedMap (celmap.go), which the macros, lists and optionals files would exercise against the standard's answers.
Desired outcome
A test in pkg/flowstate/v1 loads the textproto files for the libraries profile 2026.1 admits, evaluates each case through Evaluator (the profile environment, EvalParsed, Limits), and asserts the standard's value / eval_error result — with an explicit, reviewed skip list for cases the profile deliberately refuses (container namespaces, proto message construction outside protos, cases exceeding Limits) or where Flowstate's ordering contract differs.
Acceptance criteria
The suite runs in the gate's module tests within its time and memory bounds; the case count per file is bounded rather than the suite as a whole.
Every skip is a named case with a one-line reason; a skip-list entry that starts passing fails the test, so refusals cannot silently become accidents.
cel.dev/expr's testdata is the spec's suite, versioned separately from cel-go; pin its version deliberately (it moves with cel.dev/expr, which cel-go requires).
Cases that construct proto messages need the suite's test protos (cel.dev/expr/conformance/proto2, proto3) registered in a test-only environment; the profile environment must not gain them.
Activity