)]}'
{
  "log": [
    {
      "commit": "9328811d793947152fb80357eaadb6b1a6184542",
      "tree": "2f1217ea7fd40b396bf257714342e6a603aaf543",
      "parents": [
        "972ae198291af5cd21dadfd80def6d3f755201b1"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Wed Sep 02 04:13:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 04:13:58 2026"
      },
      "message": "Updates to cost tracking, always count errors on attributes and qualifications (#1464)\n\nSpecial-case cost tracking on invalid logical not, equality, and inequality\ntemporarily until a flag can be introduced to disable these costs"
    },
    {
      "commit": "972ae198291af5cd21dadfd80def6d3f755201b1",
      "tree": "ba25c714b1dffa178e934d932433364a57d8a738",
      "parents": [
        "05b8e0ef64d4a6ba9a097c777129524b0879b6e9"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Wed Sep 02 00:31:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 00:31:30 2026"
      },
      "message": "costs: Migrate ext/regex to the common cost APIs (#1460)"
    },
    {
      "commit": "05b8e0ef64d4a6ba9a097c777129524b0879b6e9",
      "tree": "9487de1eac62ee67e98011c3c594923fbc8b3643",
      "parents": [
        "387939b18e2aa09877da22454384839dcbd3b71c"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Tue Sep 01 19:39:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 19:39:35 2026"
      },
      "message": "Support type aliasing for native types and a new declaration style (#1463)"
    },
    {
      "commit": "387939b18e2aa09877da22454384839dcbd3b71c",
      "tree": "8dfef37b1a0b8f12a5609a84d077c3d653bf6ebb",
      "parents": [
        "4ece6d498ca31f701c9a6f34890d7c6b985bdac7"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Tue Sep 01 17:44:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 17:44:18 2026"
      },
      "message": "Extensions for hasOnly, hasAny, hasAll, and hasExactly (#1447)"
    },
    {
      "commit": "4ece6d498ca31f701c9a6f34890d7c6b985bdac7",
      "tree": "d35bafff9199e979eec601eaa6085d96c78ee27c",
      "parents": [
        "3a9ed04b5dfd825f72f42fd8cffe7d2b86c315c5"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Tue Sep 01 08:15:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 08:15:59 2026"
      },
      "message": "costs: Migrate binding and comprehension cost tests to common cost APIs (#1457)"
    },
    {
      "commit": "3a9ed04b5dfd825f72f42fd8cffe7d2b86c315c5",
      "tree": "ab000e57367afcfb436e8b411b09ecd886527e23",
      "parents": [
        "d6c7b0a72d10e65707d85ec01c419f88bb0c0bfc"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Aug 31 21:31:18 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 21:31:18 2026"
      },
      "message": "costs: Migrate ext/math to the common cost APIs (#1458)"
    },
    {
      "commit": "d6c7b0a72d10e65707d85ec01c419f88bb0c0bfc",
      "tree": "04a425169bdc807eff2a3f38043b0985f848b613",
      "parents": [
        "09898d2a2237812d60331a952e5fc05a37191ce5"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Aug 31 21:30:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 21:30:35 2026"
      },
      "message": "costs: Migrate ext/sets to common cost package (#1455)"
    },
    {
      "commit": "09898d2a2237812d60331a952e5fc05a37191ce5",
      "tree": "e5751d250ae84299cf6e9cca14392d8165368ef3",
      "parents": [
        "0533271f487940e0ea77e01e00fa0e685925f98f"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Aug 31 21:30:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 21:30:17 2026"
      },
      "message": "costs: Migrate ext/lists to common cost APIs (#1456)"
    },
    {
      "commit": "0533271f487940e0ea77e01e00fa0e685925f98f",
      "tree": "c5cbf7dd06db3524e00b79a2cae0f783e9b52023",
      "parents": [
        "1a97f72c7785a1ec5754ada486985362d9275042"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Aug 31 21:29:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 21:29:57 2026"
      },
      "message": "Migrate ext/strings to common cost package (#1454)"
    },
    {
      "commit": "1a97f72c7785a1ec5754ada486985362d9275042",
      "tree": "0eec5e9979366de480cf5527841e3e620ab6c3d4",
      "parents": [
        "6b4a015f890efd63666794c87fb66d2fca4c9ca4"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Aug 31 18:19:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 18:19:14 2026"
      },
      "message": "HMAC digest and linear-time equals (#1450)"
    },
    {
      "commit": "6b4a015f890efd63666794c87fb66d2fca4c9ca4",
      "tree": "323807703d7a0514e954a97f10c62af0a91f5959",
      "parents": [
        "aee2909e4105c0d4f34e44c9eaf6c3277af2e524"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Aug 31 18:18:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 18:18:57 2026"
      },
      "message": "Add base64.encodeUrl / base64.decodeUrl (#1451)"
    },
    {
      "commit": "aee2909e4105c0d4f34e44c9eaf6c3277af2e524",
      "tree": "0616b5a4b634985d0b5e0eead526dedd92128e2d",
      "parents": [
        "ade38bec455f88d86820198ec60d296533b10ad4"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Aug 31 18:07:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 18:07:57 2026"
      },
      "message": "Updates to JSON handling in Native Types (#1452)\n\n* Update provider and native types to better support JSON conversion and type resolution\n* Updates to special handling of unignored quoted dash"
    },
    {
      "commit": "ade38bec455f88d86820198ec60d296533b10ad4",
      "tree": "968d738daa45b9d6f0d358a7484b96a1af5827b2",
      "parents": [
        "f8478f1db3744cc966ac566123ffa1913838b44c"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Aug 31 17:55:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 17:55:38 2026"
      },
      "message": "Fix for supporting custom foldable instances properly within interpretable values (#1453)"
    },
    {
      "commit": "f8478f1db3744cc966ac566123ffa1913838b44c",
      "tree": "3bb350f028e794c73f45bc007e383995835259b2",
      "parents": [
        "6a93169e99dea3b6412af235711f61d7a47de835"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Fri Aug 28 22:57:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 22:57:42 2026"
      },
      "message": "HasValue() overload for testing presence and equality (#1448)"
    },
    {
      "commit": "6a93169e99dea3b6412af235711f61d7a47de835",
      "tree": "eddc2a1f475d860ba640c6f340824c15014f3b2e",
      "parents": [
        "a10d0eccd466e25df062670d846f987a72851ce5"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Fri Aug 28 21:04:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 21:04:17 2026"
      },
      "message": "Check for unknown before traversal through qualifiers of an unknown attribute (#1446)"
    },
    {
      "commit": "a10d0eccd466e25df062670d846f987a72851ce5",
      "tree": "7d02e4f2e0733da0d39b8b581bc1fe849fa291ff",
      "parents": [
        "45939751f4f1d47550fb8c53a12146acedee48ce"
      ],
      "author": {
        "name": "Anna Tchijova",
        "email": "anna.tchijova@gmail.com",
        "time": "Fri Aug 28 18:30:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 18:30:49 2026"
      },
      "message": "docs: document EnableMacroCallTracking requirement for ResidualAst (#1445)\n\nResidualAst() cannot serialize a residual AST back into CEL source when it\nretains an unresolved comprehension macro (all, exists, exists_one, filter,\nmap) unless the Env was created with EnableMacroCallTracking(). Without it,\nResidualAst() returns an opaque \"unsupported expression\" error instead of\nthe residual expression. Neither doc comment currently mentions this\ndependency; document it on both.\n\nCloses #1444"
    },
    {
      "commit": "45939751f4f1d47550fb8c53a12146acedee48ce",
      "tree": "8ba1f87278d169c7af0844f13a0193dd561bb1b3",
      "parents": [
        "464817cdc56e5f4f655094cba9faea5cb25381d9",
        "8ebc18b7ba39c6ed91b8fe53b31597360b2add0e"
      ],
      "author": {
        "name": "Dmitri Plotnikov",
        "email": "dplotnikov@google.com",
        "time": "Fri Aug 28 17:47:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 17:47:14 2026"
      },
      "message": "Merge pull request #1443 from cel-expr/pratt-parser-call-trailing-comma\n\n[Pratt parser] Disallow trailing commas in function call argument lists"
    },
    {
      "commit": "8ebc18b7ba39c6ed91b8fe53b31597360b2add0e",
      "tree": "8ba1f87278d169c7af0844f13a0193dd561bb1b3",
      "parents": [
        "257923ac83a01b75f94c21a2cd97a60c2acf5577"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Fri Aug 28 01:20:34 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Fri Aug 28 01:20:34 2026"
      },
      "message": "[Pratt parser] Improve error recovery on trailing comma in argument lists\n"
    },
    {
      "commit": "257923ac83a01b75f94c21a2cd97a60c2acf5577",
      "tree": "d55517bc7b3a90a2b1867098350356e6b001e58a",
      "parents": [
        "464817cdc56e5f4f655094cba9faea5cb25381d9"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Fri Aug 28 01:15:18 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Fri Aug 28 01:15:18 2026"
      },
      "message": "[Pratt parser] Disallow trailing commas in function call argument lists\n\nDisallow trailing commas in function call argument lists in the Pratt parser to match CEL grammar and ANTLR parser behavior.\n"
    },
    {
      "commit": "464817cdc56e5f4f655094cba9faea5cb25381d9",
      "tree": "9148099b2036bacca11db3bc3eb3fa2d083d6bf4",
      "parents": [
        "544d1a3c557723d310de4442796c4e51ab0b181c"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Thu Aug 27 20:31:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 20:31:26 2026"
      },
      "message": "Enable peak memory tracking in runtime interpreter and cel options (#1429)"
    },
    {
      "commit": "544d1a3c557723d310de4442796c4e51ab0b181c",
      "tree": "f4883421c135aae9d18b90448d53b97e6d025b73",
      "parents": [
        "6da3a7bb93eeb38adfe591bc13315046777a778e",
        "1b62260d94535be3de14e11bb4a410d2f3d840f2"
      ],
      "author": {
        "name": "Dmitri Plotnikov",
        "email": "dplotnikov@google.com",
        "time": "Thu Aug 27 04:05:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 04:05:31 2026"
      },
      "message": "Merge pull request #1433 from cel-expr/pratt-parser-option\n\n[Pratt parser] Add EnablePrattParser option and dual-mode testing"
    },
    {
      "commit": "1b62260d94535be3de14e11bb4a410d2f3d840f2",
      "tree": "735f96661a765170b3a36bab427849a66227217c",
      "parents": [
        "50bedff367c3d36714a5062de947597f1366b493"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Thu Aug 27 01:35:50 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Thu Aug 27 01:35:50 2026"
      },
      "message": "Revert \"[Pratt parser] Add parser recursion depth benchmark test\"\n\nThis reverts commit 50bedff367c3d36714a5062de947597f1366b493.\n"
    },
    {
      "commit": "50bedff367c3d36714a5062de947597f1366b493",
      "tree": "59a6a286bf24c86e1f4c672c1b0bd2d6a078c6ee",
      "parents": [
        "9163ff057dc43dd8c62728fae54dab38977ffa66"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Thu Aug 27 01:21:48 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Thu Aug 27 01:30:54 2026"
      },
      "message": "[Pratt parser] Add parser recursion depth benchmark test\n\nAdd TestParserRecursionDepth to measure stack memory consumption and crash boundaries when parsing deeply nested expressions in ANTLR vs Pratt parsers.\n\n### Recursion Depth Comparison (Stack: 64 KB, Max Depth: 1000)\n\n| Category | ANTLR (Max Depth OK) | Pratt (Max Depth OK) | Pratt Advantage |\n| :--- | :--- | :--- | :--- |\n| **Parens** (`(((...42...)))`) | 20 | unlimited | **unlimited** |\n| **Unary** (`! ! ! ... true`) | unlimited | unlimited | **1.0x** |\n| **Binary** (`1 + (1 + (...42...))`) | 21 | 93 | **~4.4x** |\n| **List** (`[[[...42...]]]`) | 18 | 85 | **~4.7x** |\n"
    },
    {
      "commit": "6da3a7bb93eeb38adfe591bc13315046777a778e",
      "tree": "857ce0bc5311c980791dfc96407263f3100067bc",
      "parents": [
        "50fd828405df6a2f13c3ef1b636e463c91fd8531"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Wed Aug 26 22:05:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 22:05:02 2026"
      },
      "message": "Remove an always false check from the code (#1439)"
    },
    {
      "commit": "50fd828405df6a2f13c3ef1b636e463c91fd8531",
      "tree": "a6815d6b1917a8e28c42a12a9934831ccada548b",
      "parents": [
        "415209bc15f9fbdc7688cafad059ec493f0f8232"
      ],
      "author": {
        "name": "Robin Hahling",
        "email": "code@hahling.ch",
        "time": "Wed Aug 26 18:53:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 18:53:11 2026"
      },
      "message": "Fix panic when sizing counted regex repetitions (#1438)\n\nAn environment configured with `RegexProgramSizeLimit` does not handle\nan expression with a regex that contains a counted repetition such as\n`[0-9]{3}`. Passing such an expression leads to a panic on\n`Env.Compile`.\n\nThis is because the size is computed by parsing the pattern and\ncompiling it with `regexp/syntax` without calling `Simplify` like the\nstandard library does. Simplify rewrites a counted repetition into its\nexpanded form so that `a{3}` becomes `aaa`. That step is not optional as\n`syntax.Compile` has no case for the `OpRepeat` node the parser produces\nfor `{n}` and panics on it.\n\nFix the issue by calling `Simplify` on the parsed pattern before\ncompiling it, so the size is measured on the same program\n`regexp.Compile` builds."
    },
    {
      "commit": "9163ff057dc43dd8c62728fae54dab38977ffa66",
      "tree": "735f96661a765170b3a36bab427849a66227217c",
      "parents": [
        "a334fb15f9e31ebda2c1d6dd2216e0be4fe3cc10"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Wed Aug 26 18:19:27 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Wed Aug 26 18:19:27 2026"
      },
      "message": "Remove bazel-cel-go-git-1 symlink\n"
    },
    {
      "commit": "a334fb15f9e31ebda2c1d6dd2216e0be4fe3cc10",
      "tree": "5af5f196a3833e68b960e21aa13e4efa4d03dafb",
      "parents": [
        "5248063f8a8f4cd18f2ee212815eae6a9b994f85"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Tue Aug 25 23:06:49 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Tue Aug 25 23:06:49 2026"
      },
      "message": "Remove pratt_parser_test.go reference from BUILD.bazel\n"
    },
    {
      "commit": "415209bc15f9fbdc7688cafad059ec493f0f8232",
      "tree": "b9bfb831dd1ddbddc5050769ad243d8ad079c284",
      "parents": [
        "51806c3ef4ce5477d9741cb34c9fb221bfe7ceba"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Tue Aug 25 20:11:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 20:11:30 2026"
      },
      "message": "Migrate cost tracking and estimation into common/cost (#1435)\n\n* Migrate cost tracking and estimation into common/cost\n* Update BUILD.bazel for common/cost"
    },
    {
      "commit": "51806c3ef4ce5477d9741cb34c9fb221bfe7ceba",
      "tree": "6c30ed8390d9f5cbd14e7616152fde2fd4cbe9da",
      "parents": [
        "110016cbe68bd7b66089833b05f74b11530f57ff"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Tue Aug 25 18:10:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 18:10:57 2026"
      },
      "message": "Updates to the test setup and package names (#1436)"
    },
    {
      "commit": "110016cbe68bd7b66089833b05f74b11530f57ff",
      "tree": "f0319626b3258e7c0225df22c41e4fc076e81cd3",
      "parents": [
        "6c34e246a22c635a2f29690597882e06de67f8fa"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Aug 24 18:39:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 18:39:44 2026"
      },
      "message": "Switch to direct observation of costs on a per-operation basis (#1430)"
    },
    {
      "commit": "6c34e246a22c635a2f29690597882e06de67f8fa",
      "tree": "1372fbd5c19e8ad996a560e8a15a9ef0bc7632d2",
      "parents": [
        "1ad169dd8cf724167028a63a9b9c304d1feabdd6"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Aug 24 18:38:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 18:38:55 2026"
      },
      "message": "Improve size calculation and memoization (#1431)"
    },
    {
      "commit": "5248063f8a8f4cd18f2ee212815eae6a9b994f85",
      "tree": "914c7b3ba890557fe097080f8cbb33c0e7bb97f2",
      "parents": [
        "82000ff12f9dea5db9146fb103db2f453bab2e32"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Mon Aug 24 17:42:09 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Mon Aug 24 18:12:09 2026"
      },
      "message": "[Pratt parser] Make antlrParser and prattParser unexported and fold unit tests into parser_test.go\n"
    },
    {
      "commit": "1ad169dd8cf724167028a63a9b9c304d1feabdd6",
      "tree": "5ccf0aef552376ad8406d726bb338262895b6399",
      "parents": [
        "d9ae4c8d179ed2ebb10ee52254a7bcf9662e03fc"
      ],
      "author": {
        "name": "Nilesh Patil",
        "email": "128893479+nileshpatil6@users.noreply.github.com",
        "time": "Mon Aug 24 17:00:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 17:00:15 2026"
      },
      "message": "parser: parenthesize unary operands that would reparse differently (#1434)\n\n* parser: parenthesize unary operands that would reparse differently\n\nvisitCallUnary decides whether to parenthesize its operand with\nisComplexOperator, which only returns true for a call with two or more\narguments. It was added by #262 to fix `-(1 + 2)`, and never covered an\noperand that is itself a unary call or a negative numeric literal.\n\nTwo grammar rules make that unsound. `unary` parses a run of leading \u0027-\u0027\nor \u0027!\u0027 tokens as one expression and drops the operator when the count is\neven, and `literal` binds a leading \u0027-\u0027 into an int or double constant.\nSo the unparser emits text that either means something else or does not\nparse:\n\n    !(!a)                     -\u003e !!a                     reparses as a\n    -(-a)                     -\u003e --a                     reparses as a\n    -(-(-a))                  -\u003e ---a                    reparses as -a\n    -(!a)                     -\u003e -!a                     syntax error\n    !(-a)                     -\u003e !-a                     syntax error\n    -(-1)                     -\u003e --1                     reparses as 1\n    -(-9223372036854775808)   -\u003e --9223372036854775808    invalid int literal\n\nSince AstToString is the public way to render a checked AST back to\nsource, round-tripping changes evaluation: `-(-x)` with x \u003d MinInt64 must\nraise integer overflow but returns -9223372036854775808 afterwards, and\n`!(!a)` on a non-bool must raise no such overload but returns a value.\n\nParenthesize an operand that is a single-argument logical-not or negate\ncall, or a negative int or double literal. math.Signbit is used for\ndoubles so negative zero is covered too.\n\n* parser: simplify the unary operand check to the function name\n\nThe member-function and argument-count guards cannot change the outcome,\nsince the logical-not and negate operator names are unary by definition."
    },
    {
      "commit": "82000ff12f9dea5db9146fb103db2f453bab2e32",
      "tree": "cef51e3feef815cbe73bfdd6d7260dda40bcdef7",
      "parents": [
        "1250b8b90cf32effaf8a761d72b5e6965d8fa94f"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Fri Aug 21 22:37:49 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Fri Aug 21 22:37:49 2026"
      },
      "message": "[Pratt parser] Add EnablePrattParser option and dual-mode testing\n\n- Added `EnablePrattParser` option in `parser/options.go`\n- Added dispatcher in `parser/parser.go` to route between ANTLR and Pratt parsers\n- Updated `parser_test.go` to run all tests and benchmarks across both parsers\n- Cleaned up duplicate test cases from `pratt_parser_test.go`\n\n### Single-threaded (`BenchmarkByCategory`)\n| Benchmark Category | Implementation | Time (ns/op) | Memory (B/op) | Allocs/op | Speedup / Memory Reduction |\n| :--- | :--- | :--- | :--- | :--- | :--- |\n| **Simple** | **ANTLR**\u003cbr\u003e**Pratt** | 325,234 ns/op\u003cbr\u003e**30,759 ns/op** | 110,000 B/op\u003cbr\u003e**13,549 B/op** | 1,646 allocs/op\u003cbr\u003e**404 allocs/op** | **~10.6x faster**\u003cbr\u003e**~8.1x less memory (4.1x fewer allocs)** |\n| **Complex** | **ANTLR**\u003cbr\u003e**Pratt** | 1,179,666 ns/op\u003cbr\u003e**124,332 ns/op** | 415,741 B/op\u003cbr\u003e**51,864 B/op** | 5,401 allocs/op\u003cbr\u003e**1,397 allocs/op** | **~9.5x faster**\u003cbr\u003e**~8.0x less memory (3.9x fewer allocs)** |\n| **Macros** | **ANTLR**\u003cbr\u003e**Pratt** | 422,952 ns/op\u003cbr\u003e**57,192 ns/op** | 138,618 B/op\u003cbr\u003e**23,930 B/op** | 2,049 allocs/op\u003cbr\u003e**641 allocs/op** | **~7.4x faster**\u003cbr\u003e**~5.8x less memory (3.2x fewer allocs)** |\n| **Errors** | **ANTLR**\u003cbr\u003e**Pratt** | 1,646,118 ns/op\u003cbr\u003e**99,719 ns/op** | 598,315 B/op\u003cbr\u003e**37,808 B/op** | 7,945 allocs/op\u003cbr\u003e**1,176 allocs/op** | **~16.5x faster**\u003cbr\u003e**~15.8x less memory (6.8x fewer allocs)** |\n\n### Parallel Execution (`BenchmarkParallelByCategory`)\n| Benchmark Category | Implementation | Time (ns/op) | Memory (B/op) | Allocs/op | Speedup / Memory Reduction |\n| :--- | :--- | :--- | :--- | :--- | :--- |\n| **Simple** | **ANTLR**\u003cbr\u003e**Pratt** | 199,177 ns/op\u003cbr\u003e**6,922 ns/op** | 110,128 B/op\u003cbr\u003e**13,494 B/op** | 1,649 allocs/op\u003cbr\u003e**404 allocs/op** | **~28.8x faster**\u003cbr\u003e**~8.2x less memory** |\n| **Complex** | **ANTLR**\u003cbr\u003e**Pratt** | 660,746 ns/op\u003cbr\u003e**27,752 ns/op** | 414,872 B/op\u003cbr\u003e**51,865 B/op** | 5,406 allocs/op\u003cbr\u003e**1,397 allocs/op** | **~23.8x faster**\u003cbr\u003e**~8.0x less memory** |\n| **Macros** | **ANTLR**\u003cbr\u003e**Pratt** | 219,749 ns/op\u003cbr\u003e**12,887 ns/op** | 138,100 B/op\u003cbr\u003e**23,732 B/op** | 2,053 allocs/op\u003cbr\u003e**641 allocs/op** | **~17.0x faster**\u003cbr\u003e**~5.8x less memory** |\n| **Errors** | **ANTLR**\u003cbr\u003e**Pratt** | 827,582 ns/op\u003cbr\u003e**21,358 ns/op** | 597,451 B/op\u003cbr\u003e**37,645 B/op** | 7,955 allocs/op\u003cbr\u003e**1,176 allocs/op** | **~38.7x faster**\u003cbr\u003e**~15.9x less memory** |\n"
    },
    {
      "commit": "1250b8b90cf32effaf8a761d72b5e6965d8fa94f",
      "tree": "03d5ebe7b6da84a143dc93c8fa999f343179870d",
      "parents": [
        "7bd18ac7d05f4d5064684eb40dcf7892896070ca"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Fri Aug 21 22:37:31 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Fri Aug 21 22:37:31 2026"
      },
      "message": "[Pratt parser] Extract ANTLR parser into antlr_parser.go\n"
    },
    {
      "commit": "d9ae4c8d179ed2ebb10ee52254a7bcf9662e03fc",
      "tree": "3c24f0de2b74b85af86ae154a4f4ab3d0406819c",
      "parents": [
        "077d3f4de5866604b0526ab845e2cf89503dbd17"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Fri Aug 21 21:55:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 21:55:00 2026"
      },
      "message": "Add SLSA + Sigstore signing of build artifacts (#1426)\n\n* Add SLSA + Sigstore signing of build artifacts\n* Fixes for Zizmor findings\n* Update repo badges"
    },
    {
      "commit": "077d3f4de5866604b0526ab845e2cf89503dbd17",
      "tree": "c2ca4d3c06fb375f0c6eb4688b19f67139544293",
      "parents": [
        "7bd18ac7d05f4d5064684eb40dcf7892896070ca"
      ],
      "author": {
        "name": "Dmitri Plotnikov",
        "email": "dplotnikov@google.com",
        "time": "Fri Aug 21 21:34:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 21:34:19 2026"
      },
      "message": "Add FAQ entry explaining pkg.go.dev module paths (#1432)"
    },
    {
      "commit": "7bd18ac7d05f4d5064684eb40dcf7892896070ca",
      "tree": "edadb7ea48df3fd31c1e2617f5003d769ce68956",
      "parents": [
        "ca021874c35ecdce89fcdf63f00645be4182175d",
        "a774979fb6c9a30653a89b031d1d1619d382eaf0"
      ],
      "author": {
        "name": "Dmitri Plotnikov",
        "email": "dplotnikov@google.com",
        "time": "Fri Aug 21 18:03:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 18:03:54 2026"
      },
      "message": "Merge pull request #1427 from cel-expr/pratt-parser\n\n[Pratt parser] Port Pratt parser from cel/cpp"
    },
    {
      "commit": "a774979fb6c9a30653a89b031d1d1619d382eaf0",
      "tree": "3912bde178803bd652bd557a804f2dc9250c4097",
      "parents": [
        "8fa278501fad79ac6f8197f2c681d05f3fb6bb50"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Thu Aug 20 22:09:14 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Thu Aug 20 22:09:14 2026"
      },
      "message": "[Pratt parser] Rename parseBalancedLogicalChain to parseLogicalChain\n"
    },
    {
      "commit": "8fa278501fad79ac6f8197f2c681d05f3fb6bb50",
      "tree": "9c7dfb323b7b3526b23ea5d08f1b9cef5ae8d911",
      "parents": [
        "b6b2bd723ed389cd556976ed18cff6cab957c3b8"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Thu Aug 20 22:00:28 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Thu Aug 20 22:00:28 2026"
      },
      "message": "[Pratt parser] Test multiple errors on disabled ident escape syntax\n"
    },
    {
      "commit": "b6b2bd723ed389cd556976ed18cff6cab957c3b8",
      "tree": "d8cfd3da39ef9cf7ff09d383a7ab871779042e04",
      "parents": [
        "52a1a2d4c0c315b19df967ac6a638f870fd92229"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Thu Aug 20 18:06:49 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Thu Aug 20 18:06:49 2026"
      },
      "message": "[Pratt parser] Inline newWorker into Parse\n"
    },
    {
      "commit": "52a1a2d4c0c315b19df967ac6a638f870fd92229",
      "tree": "6a432974a68c3aea2bf2b1ed304a2ab80bfb6367",
      "parents": [
        "bdd1d2464ef531d15812023a6fe36312b26f962c"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Thu Aug 20 18:03:32 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Thu Aug 20 18:03:32 2026"
      },
      "message": "[Pratt parser] Check expression size limit before allocating worker\n"
    },
    {
      "commit": "bdd1d2464ef531d15812023a6fe36312b26f962c",
      "tree": "403a7f900720ba59562c22580ce79806d4443c7a",
      "parents": [
        "f2039bc647bca407d882d90436fc8b91bab1ae62"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Wed Aug 19 19:56:37 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Thu Aug 20 01:19:28 2026"
      },
      "message": "[Pratt parser] Port Pratt parser from cel/cpp\n"
    },
    {
      "commit": "ca021874c35ecdce89fcdf63f00645be4182175d",
      "tree": "67f15cfa8ecd06c0512631a962cb5b9e17f85351",
      "parents": [
        "f2039bc647bca407d882d90436fc8b91bab1ae62"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Wed Aug 19 21:07:34 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 21:07:34 2026"
      },
      "message": "mem-track: Add memory tracker, scale-down string and byte sizes (#1418)\n\n* Scale sizes for strings and bytes, add memory tracker\n\n* resolve merge conflicts and update memory tracking guidelines\n\n* Update package imports"
    },
    {
      "commit": "f2039bc647bca407d882d90436fc8b91bab1ae62",
      "tree": "943937e51fb53e97838f8eb353a1c751322ed089",
      "parents": [
        "4715f2fa377b704358bfd2ee77be28168a4a594e",
        "78514224a5fd1d4a43e92c1c74567a2c8d9ac6a5"
      ],
      "author": {
        "name": "Dmitri Plotnikov",
        "email": "dplotnikov@google.com",
        "time": "Wed Aug 19 17:33:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 17:33:13 2026"
      },
      "message": "Merge pull request #1413 from cel-expr/vanity-cel-go-import\n\nSwitch module and import paths to cel.dev/cel-go"
    },
    {
      "commit": "78514224a5fd1d4a43e92c1c74567a2c8d9ac6a5",
      "tree": "943937e51fb53e97838f8eb353a1c751322ed089",
      "parents": [
        "aadbbf98d7e37886a6bde42432ab9846a7fc2a29"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Wed Aug 19 16:55:06 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Wed Aug 19 16:55:06 2026"
      },
      "message": "Revert \"Skip policy conformance tests when run outside Bazel\"\n\nThis reverts commit aadbbf98d7e37886a6bde42432ab9846a7fc2a29.\n"
    },
    {
      "commit": "aadbbf98d7e37886a6bde42432ab9846a7fc2a29",
      "tree": "8fdb8cb50e20b09a02bbee73edad6b1c27d601f0",
      "parents": [
        "2628ca84d83f5fc2ebd2c964a2ddd0bd4f46d846"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Wed Aug 19 16:48:43 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Wed Aug 19 16:48:43 2026"
      },
      "message": "Skip policy conformance tests when run outside Bazel\n"
    },
    {
      "commit": "2628ca84d83f5fc2ebd2c964a2ddd0bd4f46d846",
      "tree": "943937e51fb53e97838f8eb353a1c751322ed089",
      "parents": [
        "fc6a53ca6468b21b36f13856c8657a7c22c601a4",
        "4715f2fa377b704358bfd2ee77be28168a4a594e"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Wed Aug 19 16:35:05 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Wed Aug 19 16:35:05 2026"
      },
      "message": "Merge branch \u0027master\u0027 into vanity-cel-go-import\n"
    },
    {
      "commit": "4715f2fa377b704358bfd2ee77be28168a4a594e",
      "tree": "9d73ca28ea2b5f2419dd1731396ff2579878356d",
      "parents": [
        "f513cf83d763c2964bd2f1fe0bbe2f0cdc00f4c6",
        "b02bd0a2ced3b32f53c2483394398869d554be04"
      ],
      "author": {
        "name": "Dmitri Plotnikov",
        "email": "dplotnikov@google.com",
        "time": "Wed Aug 19 00:34:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 00:34:06 2026"
      },
      "message": "Merge pull request #1422 from cel-expr/parser-benchmarks\n\nAdd parser benchmarks"
    },
    {
      "commit": "b02bd0a2ced3b32f53c2483394398869d554be04",
      "tree": "2b55c026e83d23210aa2afa2268dca4f0ac5251d",
      "parents": [
        "c9ce5a25920d5d72632b57b8ff533f3fca5d3aee"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Tue Aug 18 22:28:52 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Tue Aug 18 22:33:42 2026"
      },
      "message": "Fold by-category benchmark tests into parser_test.go\n"
    },
    {
      "commit": "f513cf83d763c2964bd2f1fe0bbe2f0cdc00f4c6",
      "tree": "4549c9f489cef1e76e76723f5d3dd0613061c3c0",
      "parents": [
        "49f20a19b060a176819b7ed0561cc74154458c64"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Tue Aug 18 21:39:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 21:39:05 2026"
      },
      "message": "Fix data race for aggregate size computation (#1423)\n\nThe aggregate size memoization on immutable lists and maps is now accessed\natomically since values may be shared across concurrent evaluations, and\nsizes from computations aborted at the calculator\u0027s depth or traversal\nlimits are no longer memoized, as they depend on where in the traversal the\nvalue was encountered. EstimateAggregateSize additionally distinguishes\ngenuine uint32 saturation from computations aborted at the limits."
    },
    {
      "commit": "49f20a19b060a176819b7ed0561cc74154458c64",
      "tree": "6a728adb9029a78fecc43e7baa23eba9873a9419",
      "parents": [
        "425a3e9e0eb8ac7eef6f06d4f3805e369a5ca602"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Aug 17 23:36:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 23:36:48 2026"
      },
      "message": "Consolidate saturating cost arithmetic into common/cost (#1420)\n\nThe same saturating arithmetic existed in four places under three names:\n`safeAdd`/`safeMul` in `interpreter`, byte-identical copies in `ext`, and\n`addUint64NoOverflow`/`multiplyUint64NoOverflow`/`multiplyByCostFactor` in\n`checker`. Costs and sizes are uint64 values where math.MaxUint64 doubles as\n\"unbounded\", so every operation on them has to saturate rather than wrap;\nhaving one implementation of that per package made it easy for the domains to\ndrift.\n\n`common/cost` now owns the single exported set: SafeAdd, SafeMultiply,\nSafeMultiplyByFactor, and SafeCeil. The package depends on nothing but `math`,\nso `checker`, `interpreter`, and `ext` can all reach it without cycles.\n\nBehavioral notes, all in extreme-value territory:\n\n- `CostTracker.costCall` computed the `matches` and `contains` products with an\n  unguarded `*` while `safeMul` sat unused in the same file. Those products now\n  saturate instead of wrapping, which matters as soon as an operand size can\n  itself be saturated.\n- Inline `uint64(math.Ceil(float64(x)*factor))` conversions became\n  SafeMultiplyByFactor, which is identical in range and returns MaxUint64\n  rather than an implementation-defined value out of range.\n- Truncating conversions (`uint64(float64(size)*costFactor)`) were left alone\n  so that no in-range cost changes value.\n\nLocals named `cost` in the touched functions were renamed to `total`/`estimate`\nso the package identifier is not shadowed."
    },
    {
      "commit": "425a3e9e0eb8ac7eef6f06d4f3805e369a5ca602",
      "tree": "e686f55e9d678451eecec94e5ccb412b4f9cb384",
      "parents": [
        "9f82d0778528cd729bfb0906ff6b16ed0a5a48c5"
      ],
      "author": {
        "name": "l46kok",
        "email": "sokwhan@google.com",
        "time": "Mon Aug 17 22:30:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 22:30:00 2026"
      },
      "message": "Fix agent_tool_execution_governance policy example to match cel-policy conformance test (#1424)"
    },
    {
      "commit": "9f82d0778528cd729bfb0906ff6b16ed0a5a48c5",
      "tree": "3c00244bc183664854756fb0cb2f88b1f598a57f",
      "parents": [
        "f38faa2d9a3c1b0dad08d371466be4271391217e"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Aug 17 20:55:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 20:55:24 2026"
      },
      "message": "Aggregate semantics in Policy Compiler (#1408)\n\n* Aggregate policy evaluation semantics support\n* Additional aggregation tests showcasing multiple aggregation rules with nested match behavior\n* Replace \u0027emit\u0027 with \u0027output\u0027 to conform to spec update\n* Updates to the composition base step and aggregation"
    },
    {
      "commit": "f38faa2d9a3c1b0dad08d371466be4271391217e",
      "tree": "1f0ee501583904ac1b70749c98896fed0978056c",
      "parents": [
        "4622a98087fcf80f1f152d04154970cf8d6160d0"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Aug 17 20:55:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 20:55:02 2026"
      },
      "message": "Scale sizes for strings and bytes (#1421)\n\nString and bytes values now count as one element per ten bytes, rounding up\nwith a minimum of one element, configurable via SizeCalculatorStringUnitLength.\nSizes are measured in bytes rather than characters so that sizing large values\nis O(1) rather than a full UTF-8 scan per observation; byte length is never\nsmaller than the character count, so byte-based sizing is conservative for\nlimit enforcement."
    },
    {
      "commit": "c9ce5a25920d5d72632b57b8ff533f3fca5d3aee",
      "tree": "c4ed99bd0d1257f9e5f476e05078da1e2c32e545",
      "parents": [
        "f74ac421377cd73f45ac10437a308b22e8e174a7"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Mon Aug 17 20:27:34 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Mon Aug 17 20:30:40 2026"
      },
      "message": "Add parser benchmarks\n"
    },
    {
      "commit": "4622a98087fcf80f1f152d04154970cf8d6160d0",
      "tree": "f47170f87d54bafbfe5e17cf4518872ed1b3c348",
      "parents": [
        "76c0a6d4825573bd4e906f85258f5a180fb523a9"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Aug 17 19:32:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 19:32:56 2026"
      },
      "message": "HMAC verify / compute library (#1416)"
    },
    {
      "commit": "76c0a6d4825573bd4e906f85258f5a180fb523a9",
      "tree": "8d965be8dab9ae9716a22c32d8d577c10b34f65c",
      "parents": [
        "41262f37127a411e485d49cc94a7ffe691213450"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Aug 17 17:51:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 17:51:40 2026"
      },
      "message": "Report every evaluation step to every observer (#1419)\n\nCost tracking silently reported a cost of zero whenever state tracking was also\nenabled:\n\n\tcel.CostTracking(nil)                                 -\u003e 5\n\tcel.CostTracking(nil) + cel.EvalOptions(OptTrackState)   -\u003e 0\n\tcel.CostTracking(nil) + cel.EvalOptions(OptExhaustiveEval) -\u003e 0\n\nEach observer installed its own decorator, and decObserveEval returns a node\nwhich is already wrapped in a watcher untouched. Since the planner applies\ndecorators in order, the state observer\u0027s decorator wrapped each node first and\nthe cost observer\u0027s decorator then found a watcher and left it alone, so the\ncost observer\u0027s per-node callback was never installed. ObservableInterpretable\nstill ran the tracker\u0027s InitState and GetState, so evaluation produced a\nCostTracker reporting a cost of zero rather than an error or a nil result --\nincluding for programs configured with a cost limit, which then could not be\nexceeded.\n\nObservers now register only as observers, and the planner installs a single\ndecorator which reports each observation to all of them."
    },
    {
      "commit": "41262f37127a411e485d49cc94a7ffe691213450",
      "tree": "d49737d81dcca08a0c166389819c564de97c5f4a",
      "parents": [
        "ef240479443ae9bbf89edd93430b1be2173350a7"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Aug 17 17:11:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 17:11:33 2026"
      },
      "message": "Fix native type panic during field traversal of nil-valued structs (#1417)"
    },
    {
      "commit": "ef240479443ae9bbf89edd93430b1be2173350a7",
      "tree": "c1191d6ebdec0e2039680aaf13ca7e544a4b5c85",
      "parents": [
        "931e003859104219ead50a27d3c290e008746709"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Sat Aug 15 01:57:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 01:57:44 2026"
      },
      "message": "Support aggregate size computations over list, maps, and structs (#1404)\n\n* Support aggregate size computations over list, maps, and structs\n* Depth and traversal limits for aggregate size calculations\n* Enhancements to use Foldable and reduce duplication in native size computations"
    },
    {
      "commit": "931e003859104219ead50a27d3c290e008746709",
      "tree": "e915441e4941e165222b44aa0c12af671c174758",
      "parents": [
        "f74ac421377cd73f45ac10437a308b22e8e174a7"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Sat Aug 15 01:11:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 01:11:11 2026"
      },
      "message": "JWT data types with Parse and claim helpers (#1415)\n\n* Add Go-native JSON type support into NativeToValue\n* JWT object rep and helpers for inspecting claims\n* JWT data types, parse, and claim helpers"
    },
    {
      "commit": "f74ac421377cd73f45ac10437a308b22e8e174a7",
      "tree": "dc3b1484a58125f358ef1eca953b1b9b82d5c989",
      "parents": [
        "b6027c466d6a21efd89811256b4cea0070b02ac3"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Fri Aug 14 23:50:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 23:50:42 2026"
      },
      "message": "Add Go-native JSON type support into NativeToValue (#1402)"
    },
    {
      "commit": "b6027c466d6a21efd89811256b4cea0070b02ac3",
      "tree": "6e802244968ec8e8383335744e839d9142071f60",
      "parents": [
        "a3027a4d358fcba46cc8420411eafeeac6f0a212"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Fri Aug 14 23:23:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 23:23:38 2026"
      },
      "message": "Parsing helper for working with different types and formats of timestamp (#1414)\n\n* Parsing helper for working with different types and formats of timestamp\n* Add overflow checks and negative tests"
    },
    {
      "commit": "a3027a4d358fcba46cc8420411eafeeac6f0a212",
      "tree": "9fa4255a5a11b165c35d44ae667301f9d4f28c3f",
      "parents": [
        "424f95422e8b464379054ef4c822917be9e11ed4"
      ],
      "author": {
        "name": "Jonathan Tatum",
        "email": "jdtatum@google.com",
        "time": "Fri Aug 14 18:09:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 18:09:13 2026"
      },
      "message": "Enable list_ext conformance tests. (#1412)"
    },
    {
      "commit": "fc6a53ca6468b21b36f13856c8657a7c22c601a4",
      "tree": "6e7b6d75854173369a675236e3c5406b697789b2",
      "parents": [
        "fc1b523bbeefbbb970dd9d98aec7f59914b4788b"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Fri Aug 14 00:59:12 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Fri Aug 14 00:59:12 2026"
      },
      "message": "Update README.md badges and links for cel.dev/cel-go\n"
    },
    {
      "commit": "fc1b523bbeefbbb970dd9d98aec7f59914b4788b",
      "tree": "5d2325c28a9fe78c5a0d0ae49edc03bb84ba1e11",
      "parents": [
        "424f95422e8b464379054ef4c822917be9e11ed4"
      ],
      "author": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Fri Aug 14 00:47:36 2026"
      },
      "committer": {
        "name": "dplotnikov",
        "email": "dplotnikov@google.com",
        "time": "Fri Aug 14 00:47:36 2026"
      },
      "message": "Switch module and import paths to cel.dev/cel-go\n\nFollowing the repository relocation and adoption of the cel.dev domain,\nupdate the module path in go.mod files from github.com/google/cel-go to\ncel.dev/cel-go. Update all internal package imports and Bazel BUILD\ndefinitions accordingly.\n"
    },
    {
      "commit": "424f95422e8b464379054ef4c822917be9e11ed4",
      "tree": "6468a9acbe9122a8b31bc73274e392912cd15326",
      "parents": [
        "2cf1626d370454e40dff68b977f27382c59f170a"
      ],
      "author": {
        "name": "l46kok",
        "email": "sokwhan@google.com",
        "time": "Thu Aug 13 21:55:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 13 21:55:29 2026"
      },
      "message": "Fix shorthand type specifier parsing to allow newlines and tab characters (#1411)"
    },
    {
      "commit": "2cf1626d370454e40dff68b977f27382c59f170a",
      "tree": "5827a7fe14e71703e8937484d77ef1ebb9679a48",
      "parents": [
        "b74d3036464a222fb1ea1f1c7c89cdf2a6499dde"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Fri Aug 07 20:32:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 07 20:32:57 2026"
      },
      "message": "Env copy on write (#1405)\n\n* Program plan optimizations\n\n| Benchmark Case | Before (ns/op) | After (ns/op) | Δ Time | Before (B/op) | After (B/op) | Δ Memory | Before (allocs) | After (allocs) | Δ Allocs |\n| :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |\n| BenchmarkProgramPlan/Default | 8,153 | 930 | **-88.6%** | 8,320 | 1,416 | **-83.0%** | 36 | 26 | **-27.8%** |\n| BenchmarkProgramPlan/OptimizeUnneeded | 7,344 | 1,150 | **-84.3%** | 8,784 | 1,512 | **-82.8%** | 50 | 32 | **-36.0%** |\n| BenchmarkProgramPlan/OptimizeNeeded | 8,370 | 2,164 | **-74.1%** | 10,224 | 2,976 | **-70.9%** | 67 | 52 | **-22.4%** |\n\n* Minor refactor of the initialization logic to reduce program size\n\n* Copy-on-write semantics for types.Registry and cel.Env internals\n\n* Ensure shared declarations aren\u0027t copied unless necessary within the checker\n\n* Capture NewEnv setup benchmarks as well\n\n* Fix race-related issue with copy-on-write mutability check\n\n* Eliminate dead-code from former Copy() approach. More tests\n\n* Bug fix to support disabling declarations when using inherited declarations"
    },
    {
      "commit": "b74d3036464a222fb1ea1f1c7c89cdf2a6499dde",
      "tree": "9b4447e42b5a101c2cced8113cc6617ae239be96",
      "parents": [
        "9d5baaf22da5b1e59604d0912718331f4716d10c"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Fri Aug 07 17:01:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 07 17:01:16 2026"
      },
      "message": "Fold list concat expressions together (#1406)\n\n* Fold list concat expressions together\n* Test cases for optional tracking"
    },
    {
      "commit": "9d5baaf22da5b1e59604d0912718331f4716d10c",
      "tree": "afea99d8ae43b7b6bc67f2a5c55e85cac9904608",
      "parents": [
        "1a53cb79284be4b96b5c289673d075e7f7377d33"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Wed Aug 05 21:15:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 05 21:15:44 2026"
      },
      "message": "Program plan optimizations (#1399)\n\n* Program plan optimizations\n\n| Benchmark Case | Before (ns/op) | After (ns/op) | Δ Time | Before (B/op) | After (B/op) | Δ Memory | Before (allocs) | After (allocs) | Δ Allocs |\n| :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: |\n| BenchmarkProgramPlan/Default | 8,153 | 930 | **-88.6%** | 8,320 | 1,416 | **-83.0%** | 36 | 26 | **-27.8%** |\n| BenchmarkProgramPlan/OptimizeUnneeded | 7,344 | 1,150 | **-84.3%** | 8,784 | 1,512 | **-82.8%** | 50 | 32 | **-36.0%** |\n| BenchmarkProgramPlan/OptimizeNeeded | 8,370 | 2,164 | **-74.1%** | 10,224 | 2,976 | **-70.9%** | 67 | 52 | **-22.4%** |\n\n* Minor refactor of the initialization logic to reduce program size\n\n* Shift the dispatcher-reuse to the environment rather than the program"
    },
    {
      "commit": "1a53cb79284be4b96b5c289673d075e7f7377d33",
      "tree": "00bc6391c785ca816b01e4ac6808d9a6e8e2e325",
      "parents": [
        "f10a2e6441f175adc281484251a0fcbab92bd8a6"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Wed Aug 05 21:11:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 05 21:11:45 2026"
      },
      "message": "Release Tag Automation for go submodules (#1401)"
    },
    {
      "commit": "f10a2e6441f175adc281484251a0fcbab92bd8a6",
      "tree": "88c714ba6c58ad07e81709dbd2dbb2b37ed13e37",
      "parents": [
        "ab72257a23dbb7dc60711e83e127bb6f8ee19e5d"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Wed Aug 05 21:11:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 05 21:11:26 2026"
      },
      "message": "Optimize NativeToValue call paths (#1400)\n\n* Optimize NativeToValue to minimize allocs\n\n- **Unified `NativeToValue` Dispatch**: Consolidated private `nativeToValue` and `Registry.NativeToValue` into a single authoritative receiver method. `DefaultTypeAdapter` delegates directly to `emptyRegistry.NativeToValue`.\n- **Reflection \u0026 Allocation Reduction**:\n  - Replaced dynamic `.Convert().Interface().(T)` reflection conversions for type aliases with direct zero-allocation primitive getters (`.Int()`, `.Uint()`, `.Float()`, `.Bool()`, `.String()`).\n  - Integrated custom struct descriptor lookups directly into the reflection branch using `reflect.TypeOf(value)` for instant map matching.\n  - Eliminated duplicate `reflect.ValueOf()` instantiations and redundant nil pointer checks across conversion paths.\n---\n\n| Benchmark Target | `master` Baseline | Refactored Branch | Delta | Allocs / Op |\n| :--- | :---: | :---: | :---: | :---: |\n| `proto/TestAllTypes` | 177.0 ns/op | **87.91 ns/op** | 🚀 **+50.3% faster** | 1 alloc |\n| `nativeStruct/pointer` | 20.59 ns/op | **13.18 ns/op** | 🚀 **+36.0% faster** | 0 allocs |\n| `nativeStruct/value` | 17.25 ns/op | **13.52 ns/op** | 🚀 **+21.6% faster** | 0 allocs |\n| `ref.Val/String` | 4.81 ns/op | **2.62 ns/op** | 🚀 **+45.5% faster** | 0 allocs |\n| `ref.Val/Int` | 3.73 ns/op | **2.69 ns/op** | 🚀 **+27.9% faster** | 0 allocs |\n| `int/1` | 3.86 ns/op | **2.55 ns/op** | 🚀 **+33.9% faster** | 0 allocs |\n| `bool/true` | 2.91 ns/op | **2.11 ns/op** | 🚀 **+27.5% faster** | 0 allocs |\n\n| Benchmark Target | `master` Baseline | Refactored Branch | Delta |\n| :--- | :---: | :---: | :---: |\n| `nested_proto_field` | 141.3 ns/op | **124.7 ns/op** | 🚀 **+11.7% faster** |\n| `nested_proto_field_with_index` | 577.5 ns/op | **540.6 ns/op** | 🚀 **+6.4% faster** |\n| `index` | 122.3 ns/op | **108.1 ns/op** | 🚀 **+11.6% faster** |\n| `index_list_int_uint_type_index` | 42.87 ns/op | **38.22 ns/op** | 🚀 **+10.8% faster** |\n| `index_cross_type_float_uint` | 264.4 ns/op | **240.0 ns/op** | 🚀 **+9.2% faster** |\n| `select_subsumed_field` | 14.27 ns/op | **13.05 ns/op** | 🚀 **+8.5% faster** |\n| `select_custom_pb3_optional_field` | 43.96 ns/op | **41.71 ns/op** | 🚀 **+5.1% faster** |\n| `complex_qual_vars` | 338.4 ns/op | **323.1 ns/op** | 🚀 **+4.5% faster** |\n\n* Consistency fix for safe field getter\n\n* Remove test added by mistake"
    },
    {
      "commit": "ab72257a23dbb7dc60711e83e127bb6f8ee19e5d",
      "tree": "a1f6f2159a72bbbdccb87f73359d5cb08d0d86f3",
      "parents": [
        "ba6c27ebc0d232ae79907d778f3378a3ec741cf3"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Tue Aug 04 04:11:04 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 04:11:04 2026"
      },
      "message": "Move native type support into the Core CEL library (#1396)"
    },
    {
      "commit": "ba6c27ebc0d232ae79907d778f3378a3ec741cf3",
      "tree": "6e22b15ae91045ac68ade3d645ffa0ed40a4bab4",
      "parents": [
        "7c1df6b3f0dc75c64bdf199227f4a5335c181df3"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Fri Jul 31 20:59:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 31 20:59:35 2026"
      },
      "message": "Support self-describing, self-adapting struct types (#1395)\n\n* Support self-describing, self-adapting struct types\n* Safer duplicate type detection"
    },
    {
      "commit": "7c1df6b3f0dc75c64bdf199227f4a5335c181df3",
      "tree": "3ef849b95b0b33ebf297f2fcec57795c75ef55bc",
      "parents": [
        "c15365a7610acb37a6c8e26b6af6ee0eaf7c10ce"
      ],
      "author": {
        "name": "pranit more",
        "email": "pranit@sproutxp.com",
        "time": "Fri Jul 31 19:22:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 31 19:22:35 2026"
      },
      "message": "reject out-of-range hours in timezone offset parsing (#1391)"
    },
    {
      "commit": "c15365a7610acb37a6c8e26b6af6ee0eaf7c10ce",
      "tree": "16331684d97c30c6ec156118da1573c400428a8b",
      "parents": [
        "8c1485e1cbf94f8973b4b0616f466a681012d5db"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Thu Jul 30 04:25:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 04:25:16 2026"
      },
      "message": "Simplify support for native object types (#1393)\n\n* Simplify support for native object types\n\nShift most of the logic from the NativeTypeProvider over to the NativeObject\nwrappers. This change is a stepping stone to consolidating type providers\ninto the common/types package and making it less painful to manage type\nadaptation.\n\n* Fix for embedded type field traversal\n\n* Robustness checks for field retrieval with nil embedded pointers to structs\n\nSince promoted fields were previously not discovered, field setting\nalso needed to be updated to ensure nested pointers to structs with\npromoted fields were initialized properly.\n\n* Note for future work"
    },
    {
      "commit": "8c1485e1cbf94f8973b4b0616f466a681012d5db",
      "tree": "fd5afddbbee9b9c493a9033546dcb3bc66d91ad6",
      "parents": [
        "8bbb639931c782be1de2c55c009f0dc0e079ff6c"
      ],
      "author": {
        "name": "Jonathan Tatum",
        "email": "jdtatum@google.com",
        "time": "Wed Jul 29 19:12:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 19:12:15 2026"
      },
      "message": "Correct documented default max value for range (#1392)"
    },
    {
      "commit": "8bbb639931c782be1de2c55c009f0dc0e079ff6c",
      "tree": "fecc102e80e28316fcffd2d1a7b37d328bd18fa2",
      "parents": [
        "32243258a4b24d1ba45ee7a0c9d91a865b61f898"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Tue Jul 28 20:44:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 20:44:27 2026"
      },
      "message": "Fix the expression limit node test (#1390)"
    },
    {
      "commit": "32243258a4b24d1ba45ee7a0c9d91a865b61f898",
      "tree": "cc6cee436c53ef33613946db939614e703b994a3",
      "parents": [
        "fa407aa28b01a4a1c475e6796fc2190078020e35"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Jul 27 19:38:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 19:38:15 2026"
      },
      "message": "Improve the efficiency of optMap / optFlatMap (#1387)"
    },
    {
      "commit": "fa407aa28b01a4a1c475e6796fc2190078020e35",
      "tree": "9a87c7795244930a91748c85359a6fa494734740",
      "parents": [
        "5e219300a1260d9568c4192a3b05271d62594fce"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Jul 27 18:08:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 18:08:15 2026"
      },
      "message": "Regex program plan size controls (#1383)\n\n* Regex program plan size controls\n\nThis implementation mirrors the logic used in RE2 within cel-java\nand cel-cpp. Regex implementations across platforms do not guarantee\nequivalent program plan sizes, but this at least provides a means\nto control the plan size per-platform.\n\n* Minor refactor for maintenance of limit extraction\n\n* Minor updates to test setup"
    },
    {
      "commit": "5e219300a1260d9568c4192a3b05271d62594fce",
      "tree": "e02a6d13594bb03e7018f34e81739b7facf864e5",
      "parents": [
        "a492a702877fee0079ad2863d58b53e5ac79d1da"
      ],
      "author": {
        "name": "Roshan Singh",
        "email": "35294369+lopster568@users.noreply.github.com",
        "time": "Mon Jul 27 17:37:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 27 17:37:54 2026"
      },
      "message": "Respect composed adapter for unregistered structs (#1384)\n\nnativeTypeProvider.NativeToValue routed every struct-kind value to\nnewNativeObject, regardless of whether the type was registered via\next.NativeTypes. Every other method on the provider checks the\nnativeTypes registry first and falls back to the composed base adapter\nwhen a type is not registered; NativeToValue was the exception, so a\ncustom adapter added with cel.CustomTypeAdapter never saw unregistered\nstructs it wanted to convert itself.\n\nMirror the registry check from NewValue: only wrap registered struct\ntypes as native objects, and delegate the rest to the base adapter.\n\nFixes #1343"
    },
    {
      "commit": "a492a702877fee0079ad2863d58b53e5ac79d1da",
      "tree": "18c465f6d9777e58d139735aab81cfaec6f787be",
      "parents": [
        "b85d3bce2d83993674b326825d2f434875543aa8"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Sat Jul 25 00:08:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 25 00:08:13 2026"
      },
      "message": "Expression node limits for parser and checker (#1386)\n\n* Expression node limits for parser and checker, defaults to 100k"
    },
    {
      "commit": "b85d3bce2d83993674b326825d2f434875543aa8",
      "tree": "0d9449ff3336251e23b683514b6d09e819ae06b0",
      "parents": [
        "6f3625d264a9116a95f48de55678335b2d11613b"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Thu Jul 23 19:51:51 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 19:51:51 2026"
      },
      "message": "Add cost tracking to ext/math.go (#1353)"
    },
    {
      "commit": "6f3625d264a9116a95f48de55678335b2d11613b",
      "tree": "7cf8e429cd68c2d700edb233fcc48640ca4ff7a6",
      "parents": [
        "e15d3ca027e764e1171dfe73edee85a65aaaf4c4"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Thu Jul 23 18:45:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 18:45:05 2026"
      },
      "message": "Allow validators to be reconfigured (#1379)"
    },
    {
      "commit": "e15d3ca027e764e1171dfe73edee85a65aaaf4c4",
      "tree": "d87c3a59aa8aa23c082574221410183fcd3dfb72",
      "parents": [
        "36ff97ded3066ac9a04eea8dc398cb6731b9a323"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Thu Jul 23 18:44:51 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 18:44:51 2026"
      },
      "message": "Introduce cel.bind nesting limit (#1378)"
    },
    {
      "commit": "36ff97ded3066ac9a04eea8dc398cb6731b9a323",
      "tree": "4452849fbb55c3aa600b384c4b969ffa81334bc4",
      "parents": [
        "af38f759ad330fa856f0f2586e6969df98ae9d9b"
      ],
      "author": {
        "name": "pranit more",
        "email": "pranit@sproutxp.com",
        "time": "Thu Jul 23 15:52:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 15:52:13 2026"
      },
      "message": "copy operands in Bytes.Add to avoid aliasing the receiver (#1381)\n\nBytes values are immutable, but Add grew the receiver with append. When the\nreceiver\u0027s backing array had spare capacity the second operand was written\ninto it and the returned slice aliased the receiver, so two concatenations\nsharing a receiver corrupted each other. Allocate a fresh slice and copy\nboth operands, matching list concatenation."
    },
    {
      "commit": "af38f759ad330fa856f0f2586e6969df98ae9d9b",
      "tree": "c1a14a52a399d0fa8262e0000ebe954f335d378e",
      "parents": [
        "0175dbb694f6b92c45eb037e7ed9d2cdaa166d33"
      ],
      "author": {
        "name": "pranit more",
        "email": "pranit@sproutxp.com",
        "time": "Thu Jul 23 15:40:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 15:40:36 2026"
      },
      "message": "Fix unsound constant folding of `x in [x]` for NaN values (#1374)\n\n* Fix unsound constant folding of x in [x] for NaN values\n\nMatching an identifier needle against a list element by name assumes the value is equal to itself, which is not true of a NaN double, so the optimizer rewrote expressions that evaluate to false into true. Limit the identifier match to the scalar types that cannot hold a NaN.\n\n* Allow type and self-equal aggregates in the in-list ident match"
    },
    {
      "commit": "0175dbb694f6b92c45eb037e7ed9d2cdaa166d33",
      "tree": "ea2823b387609abacb902308c3cbed18ddbb4388",
      "parents": [
        "7ff0141e7a80434eb3d4a81908d3e7a210fd7cfc"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Thu Jul 23 04:08:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 04:08:19 2026"
      },
      "message": "Ensure logical operator fold expressions are bool (#1380)"
    },
    {
      "commit": "7ff0141e7a80434eb3d4a81908d3e7a210fd7cfc",
      "tree": "5911a0d5fcde011c8124c970a1fe99ef0e54c5ae",
      "parents": [
        "270df174e6cdb4d85d35236d744d31f1f8c60f1a"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Tue Jul 21 21:02:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 21:02:32 2026"
      },
      "message": "Add runnable examples for all expressions in celbyexample.com (#1373)\n\n* Add runnable examples for all expression in celbyexample.com\n* Cosmetic improvements to examples for Go style and clarity"
    },
    {
      "commit": "270df174e6cdb4d85d35236d744d31f1f8c60f1a",
      "tree": "b66498f7c7fce81af3533941c3be5f6edc072500",
      "parents": [
        "94b0ccedeebeb2e6a925bf3f5a3de496799a001f"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Tue Jul 21 21:02:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 21:02:15 2026"
      },
      "message": "async: Introduce Timeout and Retry wrappers (#1367)"
    },
    {
      "commit": "94b0ccedeebeb2e6a925bf3f5a3de496799a001f",
      "tree": "a5ab71d91498a39fb53481c3a8ccdeba3260999b",
      "parents": [
        "5933d078036193b6579b8aecef9894d3cbb097ef"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Tue Jul 21 20:10:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 21 20:10:31 2026"
      },
      "message": "Concurrent Eval with context.Context bound functions (#1369)\n\n* Concurrent evaluation support\n* Memoize sidecar state objects during concurrent eval.\n* Shift to lazy async calls, rather than eager, and update optimizers to use ConcurrentEval\n* panic-recovery in ConcurrentEval\n* Added leak check to the ConcurrentEval tests\n* Changed default strategy to DrainReady w/ small timeout"
    },
    {
      "commit": "5933d078036193b6579b8aecef9894d3cbb097ef",
      "tree": "a999a85a9178817c4b4b78fc42fa22396c5c3008",
      "parents": [
        "82a222f46994cfdf3d161480ca00d06dac341f96"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Mon Jul 20 20:05:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 20:05:20 2026"
      },
      "message": "Fix constant folding and local variable resolution (#1371)\n\n* Fix constant folding and local variable resolution\n* Simplified the error logic, don\u0027t produce eval errors when something can\u0027t be folded\n* Additional fixes for comprehension variable tracking and repro cases"
    },
    {
      "commit": "82a222f46994cfdf3d161480ca00d06dac341f96",
      "tree": "2cc82c70c21dd07c8880bde7c1ab4e72a0b35900",
      "parents": [
        "1d92000ff4ce59c02e6218aa17c6a5a29493e641"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Sat Jul 18 00:32:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 18 00:32:40 2026"
      },
      "message": "Graceful NaN ordering (#1370)"
    },
    {
      "commit": "1d92000ff4ce59c02e6218aa17c6a5a29493e641",
      "tree": "05fc245e194b85242f4776f7a2482871144061b5",
      "parents": [
        "646511d2f167294e54567152e94e55b69e5b6e90"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Thu Jul 16 19:33:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 19:33:38 2026"
      },
      "message": "async: Introduce DrainStrategy, DrainAction, Observer, and Call types (#1364)"
    },
    {
      "commit": "646511d2f167294e54567152e94e55b69e5b6e90",
      "tree": "befa1676a091687fa4f617ce4d4bdb8e65b31558",
      "parents": [
        "e4e56368db0132b54f7c6cf9731e08e9105b33c0"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Thu Jul 16 18:36:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 18:36:29 2026"
      },
      "message": "Cost library for ext/network (#1345)"
    },
    {
      "commit": "e4e56368db0132b54f7c6cf9731e08e9105b33c0",
      "tree": "c304a807a18aa472c9416725cf3ba063d33775ad",
      "parents": [
        "12328e54486469305f93f57b877e44b9937df7c4"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Thu Jul 16 00:23:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 00:23:02 2026"
      },
      "message": "Update lists library cost computations for improved accuracy (#1352)\n\n* Update list distinct / sort cost computations to use item hints\n* Improve list flatten estimation in v4 of lists lib"
    },
    {
      "commit": "12328e54486469305f93f57b877e44b9937df7c4",
      "tree": "0ab4f5fef5329df9ce280497c9b119bb43a90e19",
      "parents": [
        "be9dacd3025c8615df95acf4e18a91cb96dd6c86"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Wed Jul 15 19:57:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 19:57:54 2026"
      },
      "message": "Fix non-determinism in json encoding, add dummy \u0027infinite\u0027 costs (#1365)"
    },
    {
      "commit": "be9dacd3025c8615df95acf4e18a91cb96dd6c86",
      "tree": "a5f036e23538d647c79b5016bb8fb6c05a3df5f6",
      "parents": [
        "41d9149fcbe0c22a91683c10ceed46f8434678ca"
      ],
      "author": {
        "name": "William Yang",
        "email": "77467499+wilyan09007@users.noreply.github.com",
        "time": "Wed Jul 15 15:16:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 15:16:36 2026"
      },
      "message": "Add depth validation for ASTs loaded through ParsedExprToAst / Checke... (#1334)\n\ncommon/ast: depth-validate ASTs from non-parser ingestion\n\nASTs loaded via ParsedExprToAst / CheckedExprToAst bypass the parser\u0027s\nrecursion limit, so a deeply nested loaded AST could exhaust the Go\nstack during checking or planning and crash the process instead of\nreturning a normal error.\n\nAdd ast.ExceedsMaxDepth, a bounded traversal (default limit 250, the\nsame as the parser\u0027s maxRecursionDepth) that Env.Check and\nEnv.PlanProgram run before recursing, returning an ordinary error when\nthe limit is exceeded. Includes a regression test that loads a\nsynthetic over-deep AST.\n\nCo-authored-by: Tristan Swadell \u003ctswadell@google.com\u003e"
    },
    {
      "commit": "41d9149fcbe0c22a91683c10ceed46f8434678ca",
      "tree": "8ec3006c4618f475468772616e77897b5ce6fe8a",
      "parents": [
        "3d507116bdf3a50636ce217de0ac940af052da25"
      ],
      "author": {
        "name": "alhuda",
        "email": "50839256+alhudz@users.noreply.github.com",
        "time": "Wed Jul 15 15:13:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 15:13:10 2026"
      },
      "message": "reject non-RFC3339 timestamp strings in timestamp() conversion (#1338)\n\n* reject non-rfc3339 timestamp strings in timestamp() conversion"
    },
    {
      "commit": "3d507116bdf3a50636ce217de0ac940af052da25",
      "tree": "cf7f76fe58a7f75dbdca6364f7be11d65cd6c5de",
      "parents": [
        "83eed56b0fe697952d3bbae964e5539c16cf3a09"
      ],
      "author": {
        "name": "Tristan Swadell",
        "email": "tswadell@google.com",
        "time": "Tue Jul 14 17:00:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 17:00:42 2026"
      },
      "message": "Async function execution internals (#1355)\n\nAsync function execution internals with context cancellation notification and observable async calls with completions"
    }
  ],
  "next": "83eed56b0fe697952d3bbae964e5539c16cf3a09"
}
