Skip to content

Re-measure conformance against cel-go v0.33.1 - #10

Merged
3 commits merged into
emfga:mainfrom
lemuelroberto:update-cel-go
Oct 29, 2026
Merged

3 commits merged into
emfga:mainfrom
lemuelroberto:update-cel-go

Conversation

@lemuelroberto

Copy link
Copy Markdown
Member

Stacked on #8. Merge #8 first, then this one. Until #8 lands, the
diff here also includes #8's commit.

Moves the reference implementation from cel-go v0.32.0 to v0.33.1 as
a deliberate re-measurement, following CLAUDE.md's oracle rules.

Pins

Old New
cel.dev/cel-go (go.mod + internal/oracle.Version) v0.32.0 v0.33.1
cel-spec corpus (ci.yml + internal/corpus.Pin) v0.25.3 ba58ae50… unchanged, still the latest release
cel.dev/expr v0.25.3 unchanged; this is what v0.33.1 requires

Measurement

  • go test ./...: all packages pass on a fresh install, including
    the conformance suite and the unknowns suite. Run 1841, passed
    1841, failed 0, skipped 667 (same named skip lists), 10
    divergences. Every count matches v0.32.0, and the regenerated
    docs/conformance-report.* differ only in the cel-go version line.
  • I re-ran the three divergences documented in docs/CONFORMANCE.md
    under v0.33.1 and they still hold: {0: 1, 0u: 2} returns a map,
    getMilliseconds() returns the total (123321), and parseIPAddr
    rejects both IPv4-mapped forms.
  • Spot checks for the parser and timestamp changes in the v0.33
    changelog agree between cel-go and cel4postgres: newlines inside
    single-quoted string literals, trailing commas in calls, lists and
    maps, and timezone-offset range errors. The new Pratt parser and the
    legacy timestamp parsing are opt-in in cel-go and stay off.

Oracle library pins

v0.33.0 added functions to three libraries the oracle used to enable
unversioned:

  • lists 5: hasOnly, hasAny, hasAll, hasExactly
  • encoders 2: base64.encodeUrl / decodeUrl, json.*, yaml.*
  • optionals 3–4: optional.hasValue(v) and the single-evaluation
    optMap / optFlatMap expansion

sql/ registers none of them. internal/oracle/options.go now pins
ListsVersion(4), EncodersVersion(1) and OptionalTypesVersion(2),
which are exactly the surface cel-go v0.32.0 had. Without these pins
the reference env would quietly grow on every bump and stop matching
the env it is compared with. Implementing the new functions is
follow-up work.

SQL

No change to sql/. Release artifacts stay byte-identical apart from
the version number in #9.

The CLAUDE.md pin sentence is updated in its own commit.

Every pin in the tree -- go.mod, the compose and Dockerfile images,
the action SHAs, pg_tle -- has so far been bumped by hand, which in
practice means not bumped. Renovate watches all of them on a weekly
schedule, keeps go.sum tidy, and groups the noisy updates (action
SHAs, image digests, golang.org/x) so review stays cheap.

cel-go and PostgreSQL majors get a note in their PR body rather than
a routine path: cel-go is the conformance oracle and CLAUDE.md keeps
it exactly pinned, so its bump has to be a deliberate re-measurement
with oracle.Version moved alongside. pg_tle is pinned as an ARG
Renovate cannot see, so a regex manager tracks it in the Dockerfile
and the install guide together.
The reference moves to the current cel-go release so the next
cel4postgres release is measured against what upstream ships. The
full suite and the unknowns suite pass unchanged, and the report's
divergences are the same ten as under v0.32.0; the three documented
in CONFORMANCE.md were re-run and still hold.

v0.33.0 grew three of the libraries the oracle enables unversioned:
lists 5 (hasOnly, hasAny, hasAll, hasExactly), encoders 2
(base64.encodeUrl/decodeUrl, json and yaml) and optionals 3-4
(optional.hasValue, single-evaluation optMap/optFlatMap). sql/ does
not register any of those, so the oracle pins each library to the
version sql/ implements; otherwise the reference env would silently
widen on every bump and stop matching the env it is compared with.
The cel-spec corpus stays at v0.25.3, still its latest release.
The pin moved with a re-measurement behind it; the sentence that names
it has to move too, or CLAUDE.md disagrees with go.mod and
oracle.Version on the one fact it insists stays exact.
@lemuelroberto lemuelroberto closed this pull request by merging all changes into emfga:main in 649eee0 Oct 29, 2026
@lemuelroberto
lemuelroberto deleted the update-cel-go branch October 30, 2026 01:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant