What you will do
You will run the prepared expression in the playground above, change one input at a time, and explain the result. Start in CEL only, then repeat the same rule in CEL + JSON.
How it works
The expression converts both inputs to timestamps before comparison. This compares instants, including their UTC offsets, rather than relying on the spelling of the strings. <= accepts an event exactly at the deadline as well as an earlier event.
Read the prepared example
The CEL + JSON rule is:
timestamp(receivedAt) <= timestamp(deadline)Its input is:
{
"receivedAt": "2026-07-23T09:15:00Z",
"deadline": "2026-07-23T10:00:00Z"
}The CEL only tab contains the values and the rule in one expression. The enabled cel.bind() extension keeps each name local to its final argument.
Evaluation step by step
- Both RFC 3339 strings are parsed.
09:15Zoccurs before10:00Z.- The comparison returns
true.
Your task
- Run the on-time example.
- Move
receivedAtto10:01:00Z. - Set it exactly to the deadline and explain the result.
Expected observation: 10:01 is late and returns false; exactly 10:00 returns true because the operator is <=.
Common mistake
String ordering is not a substitute for time parsing when offsets or formatting can differ.
Show the explanation
No. Use <= when equality is considered on time.
Knowledge check
Would < accept an event exactly at the deadline?
Key takeaway
Compare parsed timestamps and choose the boundary operator deliberately.
Sources
CEL-DEV— official CEL overview.CEL-LANG— official CEL language definition.CEL-GO-BIND— official documentation for the optionalcel.bind()extension used by the self-contained tab.