Skip to content

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

Open

Description

@picatz

Observed behavior

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

Constraints

  • 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    dslFlowfile DSL, YAML front end, expressionsengineExecution engine, schema, runtime internalstesting

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions