)]}'
{
  "log": [
    {
      "commit": "fcefe6d38acfe1353fa955b66ab966ea9033418c",
      "tree": "672f58b740ad73b6671f4f56502cea70576b8c1c",
      "parents": [
        "64cd2df78a83e7a4700606295444c263fdb2b282"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Fri Jul 24 14:25:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 14:25:26 2026 +0800"
      },
      "message": "fix(healthcheck): probe domain nodes by the node domain, not the resolved ip (#13743)"
    },
    {
      "commit": "64cd2df78a83e7a4700606295444c263fdb2b282",
      "tree": "9d37568296eeabd7ab2825101c8de24a59458a9f",
      "parents": [
        "15c894f18981cd00e2ca669443c2b4a3c4603395"
      ],
      "author": {
        "name": "Luarx",
        "email": "22997139+luarx@users.noreply.github.com",
        "time": "Fri Jul 24 05:34:39 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 11:34:39 2026 +0800"
      },
      "message": "feat(openid-connect): add set_raw_id_token_header option (#13616)"
    },
    {
      "commit": "15c894f18981cd00e2ca669443c2b4a3c4603395",
      "tree": "c3924749404aab10b694004c67be660db8942cb8",
      "parents": [
        "6125bf3b9887451456c47fb1beb693d083c25192"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Fri Jul 24 00:48:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 22:33:20 2026 +0545"
      },
      "message": "fix(admin): encrypt only after successful validation (#13729)"
    },
    {
      "commit": "6125bf3b9887451456c47fb1beb693d083c25192",
      "tree": "0fbb3f44a9b0ebe1f79565f7dd2e1dbba4eb8839",
      "parents": [
        "924ee230399c48bc8d374769b7c35fea6c24f83b"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Thu Jul 23 21:21:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 21:21:31 2026 +0800"
      },
      "message": "feat: support http_method and http_req_body in active health checks (#13726)"
    },
    {
      "commit": "924ee230399c48bc8d374769b7c35fea6c24f83b",
      "tree": "14e6787c7505b533bf6a5969661bd61ce0e9a7a9",
      "parents": [
        "af8466ecbf6c1394895c015018f756e82a61fed3"
      ],
      "author": {
        "name": "Yilia Lin",
        "email": "114121331+Yilialinn@users.noreply.github.com",
        "time": "Thu Jul 23 16:33:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 16:33:09 2026 +0800"
      },
      "message": "docs: add SEO metadata for HTTP/3 guide (#13730)"
    },
    {
      "commit": "af8466ecbf6c1394895c015018f756e82a61fed3",
      "tree": "0cb593bd2ee4dc351308ec7d25c8d7b8546be105",
      "parents": [
        "f92576ffa9244a4560f729a82cfe2aa0a44aafc3"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Thu Jul 23 15:13:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 15:13:03 2026 +0800"
      },
      "message": "chore(deps): bump lua-resty-openapi-validator to 1.0.6 (#13728)"
    },
    {
      "commit": "f92576ffa9244a4560f729a82cfe2aa0a44aafc3",
      "tree": "3949fe4ece3fed807902ee76fa320eddb381beb4",
      "parents": [
        "070853d6a1c98b4c2e69c502a0ed577c3d5570bc"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Thu Jul 23 15:10:07 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 15:10:07 2026 +0800"
      },
      "message": "refactor(ai-providers): make the LLM request client ctx-free (#13699)"
    },
    {
      "commit": "070853d6a1c98b4c2e69c502a0ed577c3d5570bc",
      "tree": "09bc2d08ec10d82439e7cdb0c36b54832206b62d",
      "parents": [
        "82fcf548fa3c283e81ed8517e7eec70325902122"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Thu Jul 23 11:38:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 09:23:08 2026 +0545"
      },
      "message": "feat: bound request and response body buffering in plugins (#13705)"
    },
    {
      "commit": "82fcf548fa3c283e81ed8517e7eec70325902122",
      "tree": "1e1d7e943e22fc8521c6a45b26d975c3e5a06e7a",
      "parents": [
        "a4c4832a9f459e21d7e035f0c90522f8696758de"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Wed Jul 22 14:47:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 14:47:14 2026 +0800"
      },
      "message": "feat(proxy-rewrite): support multiple same-name headers in headers.add/set (#13597)"
    },
    {
      "commit": "a4c4832a9f459e21d7e035f0c90522f8696758de",
      "tree": "eda4f4bd01682d9d7dd12541b1de1ff325e0ed95",
      "parents": [
        "132f5a2581e1fb89ce112965dfd09900fae7bfa3"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Wed Jul 22 12:08:23 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 12:08:23 2026 +0800"
      },
      "message": "fix(cli): quote nginx_config.envs entries so values with spaces work (#13713)"
    },
    {
      "commit": "132f5a2581e1fb89ce112965dfd09900fae7bfa3",
      "tree": "3199efb638744ae57bc6e4d0c7d8e49f27b48bad",
      "parents": [
        "c9eaca6b46e05476fe7a49ba3e412e4c5630d38c"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Wed Jul 22 11:55:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 11:55:17 2026 +0800"
      },
      "message": "fix(openid-connect): redirect instead of 500 on a stale authorization callback (#13712)"
    },
    {
      "commit": "c9eaca6b46e05476fe7a49ba3e412e4c5630d38c",
      "tree": "6d5a585b94b83e83d48d2c2c91e160ce0c7e90f0",
      "parents": [
        "f9f4a70f470c092bbc00358aa010f74a1c1fc498"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Wed Jul 22 11:54:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 11:54:51 2026 +0800"
      },
      "message": "fix(admin): reconcile plugins reload instead of trusting the broadcast (#13714)"
    },
    {
      "commit": "f9f4a70f470c092bbc00358aa010f74a1c1fc498",
      "tree": "d535d070330c0ebb5fbc458e6a81771c9d7a5b3a",
      "parents": [
        "0f35b154824ed51d0d4bdadc78d1d5fa9ed1ec62"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Wed Jul 22 11:53:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 11:53:43 2026 +0800"
      },
      "message": "fix(ai-proxy): report error-path latency vars in milliseconds (#13711)"
    },
    {
      "commit": "0f35b154824ed51d0d4bdadc78d1d5fa9ed1ec62",
      "tree": "ed64441e305269082b9509b3872546a6fc0b7a21",
      "parents": [
        "de5cbb476f594d3b525a088a2f285e9a2bbc583e"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Jul 20 18:41:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 16:26:43 2026 +0545"
      },
      "message": "fix(wolf-rbac): clear upstream identity headers when auth response omits userInfo (#13696)"
    },
    {
      "commit": "de5cbb476f594d3b525a088a2f285e9a2bbc583e",
      "tree": "c6b9cfb3db54559ac6f22dc391177197fba73d61",
      "parents": [
        "ec14387671fe362d571c3879b84bfedbbe3f1d12"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Jul 20 18:41:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 16:26:33 2026 +0545"
      },
      "message": "fix(opentelemetry): use oneOf for metadata additionalProperties value type (#13690)"
    },
    {
      "commit": "ec14387671fe362d571c3879b84bfedbbe3f1d12",
      "tree": "df4753626149c51cbba58c548a3732882691999c",
      "parents": [
        "34d42effd90e1baa6b385c7486e60736c68049cf"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Mon Jul 20 15:11:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 15:11:04 2026 +0800"
      },
      "message": "change(debug): report executed plugins with phase in execution order (#13710)"
    },
    {
      "commit": "34d42effd90e1baa6b385c7486e60736c68049cf",
      "tree": "f8d6abdad91a51065d26e8ed519dcb8363bd711e",
      "parents": [
        "90617c414281154bec4fbbebc16191bc8b7075f1"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Mon Jul 20 14:32:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 14:32:06 2026 +0800"
      },
      "message": "feat(stream): support set_real_ip_from to trust an inbound PROXY protocol header (#13700)"
    },
    {
      "commit": "90617c414281154bec4fbbebc16191bc8b7075f1",
      "tree": "0198ad978ab970554924f5cdd132768c76755e72",
      "parents": [
        "c14d8e4a63f043d0577a20837996e2211e76d190"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Mon Jul 20 14:29:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 14:29:15 2026 +0800"
      },
      "message": "fix(prometheus): bump nginx-lua-prometheus-api7 to 0.20260716 (#13708)"
    },
    {
      "commit": "c14d8e4a63f043d0577a20837996e2211e76d190",
      "tree": "1c291b001228a3c15c55e9d48f0310a2696306d9",
      "parents": [
        "85bbd308faa8af7e5e3f862a3bbf7d86bd43aed9"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Mon Jul 20 12:15:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 12:15:10 2026 +0800"
      },
      "message": "test(error-log-logger): don\u0027t assert a fixed JSON key order for the broker list (#13703)"
    },
    {
      "commit": "85bbd308faa8af7e5e3f862a3bbf7d86bd43aed9",
      "tree": "e141e7d7118b1ef963ec0706f8a54a84846b81bc",
      "parents": [
        "3978aa3c52c7d4d873c2ba5c6d48456cd92f2c28"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Mon Jul 20 12:14:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 12:14:22 2026 +0800"
      },
      "message": "test(kubernetes): stop TEST 3 failing on the expected apiserver connect error (#13701)"
    },
    {
      "commit": "3978aa3c52c7d4d873c2ba5c6d48456cd92f2c28",
      "tree": "55f68524a2a9dabd9f5be937658f0f38509ef5fc",
      "parents": [
        "9ba97699d1f0ee84e90eea0e3611a341f5a8fa10"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Mon Jul 20 12:13:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 12:13:59 2026 +0800"
      },
      "message": "fix(limit-count): commit() must report the window-weighted remaining (#13704)"
    },
    {
      "commit": "9ba97699d1f0ee84e90eea0e3611a341f5a8fa10",
      "tree": "99384b4b7d7db60ffb452e8cbf0749859355a135",
      "parents": [
        "6c6877521807aaeba906fa038cddfba4ec0d38ee"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Mon Jul 20 10:12:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 10:12:38 2026 +0800"
      },
      "message": "chore: bump apisix-runtime to 1.3.11 (#13697)"
    },
    {
      "commit": "6c6877521807aaeba906fa038cddfba4ec0d38ee",
      "tree": "8668b450db36046016b15c4797136d64be45a9d7",
      "parents": [
        "72b247542da6f73ff123b48562e2b84e10592c90"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Fri Jul 17 15:13:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 15:13:26 2026 +0800"
      },
      "message": "fix(balancer): keep least_conn load state across upstream scaling (#13666)"
    },
    {
      "commit": "72b247542da6f73ff123b48562e2b84e10592c90",
      "tree": "48613ec0c6fe00782c4d2a0c7a98f40e7af85517",
      "parents": [
        "b86a6c8bad0554260f58324442c9ce2f8f1af607"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Fri Jul 17 10:18:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 10:18:40 2026 +0800"
      },
      "message": "fix(admin): duplicate consumer authentication keys are silently accepted (#13529)"
    },
    {
      "commit": "b86a6c8bad0554260f58324442c9ce2f8f1af607",
      "tree": "bfb9142b052d26567882514e6ef836f6ba7d4605",
      "parents": [
        "cd61deb3976fae44153d20a16d86643ea218e9c3"
      ],
      "author": {
        "name": "JinHwanKim",
        "email": "ecsimsw@gmail.com",
        "time": "Thu Jul 16 19:12:27 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 16 18:12:27 2026 +0800"
      },
      "message": "feat(kafka-logger): add TLS support for Kafka brokers (#13607)"
    },
    {
      "commit": "cd61deb3976fae44153d20a16d86643ea218e9c3",
      "tree": "68e85ba5c3fa0dabf8c4e27a485d386d6da818a0",
      "parents": [
        "6a0ab86d3be40f5e87d2df8c019b2d5ee226feff"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Wed Jul 15 17:03:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 14:48:38 2026 +0545"
      },
      "message": "fix(request-validation): guard non-string Content-Type before lower() (#13691)"
    },
    {
      "commit": "6a0ab86d3be40f5e87d2df8c019b2d5ee226feff",
      "tree": "b5eb30f4ae1d66239f8e781e31ac6fabf9600f6b",
      "parents": [
        "a3e5f66647c2f3f9869dbf3938621d3c52be7156"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Wed Jul 15 16:49:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 14:34:48 2026 +0545"
      },
      "message": "fix(key-auth): propagate real auth error to multi-auth orchestrator (#13693)"
    },
    {
      "commit": "a3e5f66647c2f3f9869dbf3938621d3c52be7156",
      "tree": "db10a7ef205b2cb89b78e07be861229f1ebd3b55",
      "parents": [
        "6c7b56a9b19ebe56f09d8eaa43380362c752af98"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Wed Jul 15 16:49:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 14:34:38 2026 +0545"
      },
      "message": "fix(ai-content-moderation): validate deny_code is a valid HTTP status (#13692)"
    },
    {
      "commit": "6c7b56a9b19ebe56f09d8eaa43380362c752af98",
      "tree": "cd355185eaffee37ff9537ddbdfe7b90d1bdc041",
      "parents": [
        "36e5ef1294cdd363beb55ada8b58e3778d4707e0"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Wed Jul 15 13:29:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 13:29:41 2026 +0800"
      },
      "message": "fix(json): make cjson instances inherit APISIX\u0027s cjson options (#13680)"
    },
    {
      "commit": "36e5ef1294cdd363beb55ada8b58e3778d4707e0",
      "tree": "9363b0ebb22141297ec29193b7782dce97bd368c",
      "parents": [
        "53e5bb503ff75660b194650682c0f8d00d417a3b"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Wed Jul 15 08:46:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 08:46:29 2026 +0800"
      },
      "message": "fix(healthcheck): reuse the checker on node-only upstream changes instead of destroy-and-rebuild (#13629)"
    },
    {
      "commit": "53e5bb503ff75660b194650682c0f8d00d417a3b",
      "tree": "602ae6f73b13482906977fc12f7174791c58381b",
      "parents": [
        "f194355694b467139b3514ab71229a955da6802c"
      ],
      "author": {
        "name": "Artem Pronchakov",
        "email": "artem.pronchakov@mail.ru",
        "time": "Wed Jul 15 02:04:00 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 15 07:04:00 2026 +0800"
      },
      "message": "fix(cli): remove stale key after resolving env var in config keys (#12885)"
    },
    {
      "commit": "f194355694b467139b3514ab71229a955da6802c",
      "tree": "fb516ec37cd96febde607997d165a2e5f694a008",
      "parents": [
        "c3d7d5ec69774121f53d2e20d29d09c816795dd7"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Tue Jul 14 11:04:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 11:04:19 2026 +0800"
      },
      "message": "ci: bump apisix-runtime to 1.3.9 (#13695)"
    },
    {
      "commit": "c3d7d5ec69774121f53d2e20d29d09c816795dd7",
      "tree": "a0c058dc523d2d35158c21818caeb571d7201ae7",
      "parents": [
        "51bf1fb71cccc7c4168783a01dfc65ea524b84ca"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Jul 13 13:27:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 11:12:25 2026 +0545"
      },
      "message": "test: add missing regression coverage for data-mask and saml-auth (#13684)"
    },
    {
      "commit": "51bf1fb71cccc7c4168783a01dfc65ea524b84ca",
      "tree": "f833bfd00b37b226e5761f34147f2f558e263dd8",
      "parents": [
        "58a4aa647fb92f0580e0cb68a70994be635b3ed3"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Jul 13 11:32:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 09:17:04 2026 +0545"
      },
      "message": "fix(basic-auth): validate anonymous_consumer against schema (#13682)"
    },
    {
      "commit": "58a4aa647fb92f0580e0cb68a70994be635b3ed3",
      "tree": "421dde4ff037021f32adebe47b996d6a7717d956",
      "parents": [
        "2790b2fc08427f8faa62f2f6fd32303dd46cd64d"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Jul 13 11:31:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 09:16:46 2026 +0545"
      },
      "message": "feat(ai-rate-limiting): support redis policy for shared counters (#13670)"
    },
    {
      "commit": "2790b2fc08427f8faa62f2f6fd32303dd46cd64d",
      "tree": "1964f38c574f6afe5572370d465c2b6adc9f04f5",
      "parents": [
        "1f16a6c88fc280998b34f4c6f4c4fad7de136d33"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Fri Jul 10 18:11:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 18:11:11 2026 +0800"
      },
      "message": "feat: raise default sizes for non-evictable shared dicts (#13688)"
    },
    {
      "commit": "1f16a6c88fc280998b34f4c6f4c4fad7de136d33",
      "tree": "3524aaa57538ab4b838485cf3af6366036dfcab3",
      "parents": [
        "cbd264a310732b3a773b7bc2c026d066c60ab6cb"
      ],
      "author": {
        "name": "J.A.",
        "email": "cybersec.ja@proton.me",
        "time": "Fri Jul 10 08:42:42 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 14:42:42 2026 +0800"
      },
      "message": "fix: fetch secrets from upstream ssl config (#13062)"
    },
    {
      "commit": "cbd264a310732b3a773b7bc2c026d066c60ab6cb",
      "tree": "0b6506ac892bd088af18dd7396cab4bb6c0d86ad",
      "parents": [
        "100be4c766b42b84ab1af2876f5cdfc340e253fd"
      ],
      "author": {
        "name": "prasun srivastav",
        "email": "prasunsrivastav123@gmail.com",
        "time": "Fri Jul 10 12:08:13 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 14:38:13 2026 +0800"
      },
      "message": "fix(opentelemetry): validate x-request-id before using it as trace_id (#12990)"
    },
    {
      "commit": "100be4c766b42b84ab1af2876f5cdfc340e253fd",
      "tree": "be10d9b5938dd9e6403948e9e547e147dc433e60",
      "parents": [
        "2f0898c1ee28a1e3918221650f83526c6781bb24"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Fri Jul 10 11:53:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 09:38:48 2026 +0545"
      },
      "message": "fix(datadog): cap coalesced DogStatsD datagram size, fall back to per-metric sends (#13665)"
    },
    {
      "commit": "2f0898c1ee28a1e3918221650f83526c6781bb24",
      "tree": "cc77bee2507b9ac271a40c8a7d55838da9e6f081",
      "parents": [
        "c7a76b25ca68b4c8cf36e4831a52a77bb4151b67"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Fri Jul 10 11:53:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 09:38:37 2026 +0545"
      },
      "message": "fix: invalidate secret LRU cache on /secrets changes (#13668)"
    },
    {
      "commit": "c7a76b25ca68b4c8cf36e4831a52a77bb4151b67",
      "tree": "9961b83b2ba7dde398feefc782c07c6e68acebe0",
      "parents": [
        "8f327869ed9ffc7bcba0e28f10834446f4a94a36"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Fri Jul 10 10:35:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 10:35:54 2026 +0800"
      },
      "message": "fix(grpc-transcode): encode empty repeated fields as JSON arrays (#13678)\n\nAn empty `repeated` field is decoded by lua-protobuf into an empty Lua\ntable, which cjson then encodes as `{}` instead of `[]`.\n\nSet the `*array` default metatable to `core.json.array_mt` on the pb\nstate of each compiled proto, so lua-protobuf tags every repeated field\nas an array on decode. Maps keep their object semantics, and both the\ntext and the binary descriptor paths are covered.\n\nFixes #11440"
    },
    {
      "commit": "8f327869ed9ffc7bcba0e28f10834446f4a94a36",
      "tree": "1264ef529598759e2ee4c5d189fa1ea96580cad6",
      "parents": [
        "08aafa560900f2f44670fe0ad76c9d6cc4e6bd09"
      ],
      "author": {
        "name": "Ming Wen",
        "email": "moonbingbing@gmail.com",
        "time": "Fri Jul 10 08:46:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 08:46:37 2026 +0800"
      },
      "message": "fix: remove dead chaos tests and bump vulnerable test dependencies (#13679)\n\n* fix: remove dead chaos tests and bump vulnerable test dependencies\n\nClears all 40 open Dependabot alerts in the test tree.\n\n- Remove t/chaos: the Chaos Mesh / etcd chaos suite is no longer wired\n  into any CI workflow and pins ancient k8s.io/client-go v0.17.0, which\n  dragged in 26 vulnerable transitive Go deps (1 critical + 13 high),\n  the bulk of the repo\u0027s Dependabot noise. None of it ships in the\n  runtime (APISIX is Lua/OpenResty); it is test-only and unused.\n- t/plugin/grpc-web, t/grpc_server_example: bump golang.org/x/net to\n  v0.55.0 (the first patched release). This raises each module\u0027s go\n  directive to 1.25, so bump the Go toolchain used to build these test\n  gRPC servers accordingly (build.yml + ci/redhat-ci.sh).\n- t/package.json: add pnpm overrides pinning the vulnerable transitive\n  npm deps to their first patched, same-major releases —\n  hono \u003e\u003d4.12.25, js-yaml ^3.15.0, form-data ^4.0.6, @babel/core ^7.29.6.\n\n* chore: bump go-version in disabled gm-cron workflow for consistency\n\n* ci: provision Go 1.25 only for the test gRPC builds, keep job on 1.17\n\nThe x/net v0.55.0 bump raised the grpc test modules to go 1.25, but the\nbuild.yml job Go is shared with the TinyGo 0.20.0 wasm build and the\nxds-library build, which require Go \u003c\u003d 1.17. Bumping the whole job to\n1.25.1 broke the \"Build wasm code\" step.\n\nInstead keep the job\u0027s Go at 1.17 and install go1.25.1 locally just for\nthe gRPC server builds in linux_openresty_common_runner.sh (mirroring the\nexisting pattern in redhat-ci.sh). Revert the build.yml and disabled\ngm-cron setup-go bumps back to 1.17."
    },
    {
      "commit": "08aafa560900f2f44670fe0ad76c9d6cc4e6bd09",
      "tree": "499a23344e45f7e24cf600ec24f8dee7c3c40f41",
      "parents": [
        "a28d9bb50d78b37bbda83a8b37eb17df5dc16193"
      ],
      "author": {
        "name": "Ming Wen",
        "email": "moonbingbing@gmail.com",
        "time": "Fri Jul 10 00:58:53 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 00:58:53 2026 +0800"
      },
      "message": "docs: improve README with quickstart, AI Gateway section, and TOC (#13677)\n\n* docs: improve README with quickstart, AI Gateway section, and TOC\n\n* docs: clarify Admin API port and restore plugin-concept link"
    },
    {
      "commit": "a28d9bb50d78b37bbda83a8b37eb17df5dc16193",
      "tree": "7ffd4c6dcfa95a8b988c9d1359c9e6f426664fb4",
      "parents": [
        "99106e53e1c48aac3a0849c01deda36c8095fa87"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Thu Jul 09 12:24:47 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 12:24:47 2026 +0800"
      },
      "message": "fix(ai-proxy): correct Anthropic Messages to OpenAI Chat request conversion (#13674)"
    },
    {
      "commit": "99106e53e1c48aac3a0849c01deda36c8095fa87",
      "tree": "4d3cf20b006a7011cbd386fba3f5d0374c947f31",
      "parents": [
        "809455eb1a5cc738ff4e79cd374c6725bef1786a"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Wed Jul 08 19:35:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 17:20:38 2026 +0545"
      },
      "message": "fix(admin): harden stream_route superior_id dependency checks (#13672)"
    },
    {
      "commit": "809455eb1a5cc738ff4e79cd374c6725bef1786a",
      "tree": "d9ba62000f42dbbfacb9e4f52c20322ff6d85f52",
      "parents": [
        "9962bee2b598e7ab4ea77f631bc23f0474af86a7"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Wed Jul 08 19:34:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 17:19:32 2026 +0545"
      },
      "message": "test(file-logger): cover per-node upstream_unresolved_host mapping (#13669)"
    },
    {
      "commit": "9962bee2b598e7ab4ea77f631bc23f0474af86a7",
      "tree": "24c7d20488018f366d55d1c5505b659f787192bb",
      "parents": [
        "a3a8138f6709fd6ebec519a2877e21d7bec84dde"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Wed Jul 08 19:33:53 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 17:18:53 2026 +0545"
      },
      "message": "fix: reject consumer auth when secret reference fails to resolve (#13667)"
    },
    {
      "commit": "a3a8138f6709fd6ebec519a2877e21d7bec84dde",
      "tree": "5d4c6ff3f397e8042f6139b436a5248a67bddee2",
      "parents": [
        "7f67c20899f185631cf3b5dab93a0e9bb07730fe"
      ],
      "author": {
        "name": "YapWC",
        "email": "34093361+YapWC@users.noreply.github.com",
        "time": "Wed Jul 08 16:23:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 16:23:22 2026 +0800"
      },
      "message": "fix(proxy-rewrite): query string discarded when use_real_request_uri_… (#12843)"
    },
    {
      "commit": "7f67c20899f185631cf3b5dab93a0e9bb07730fe",
      "tree": "056787ff32a6a38b365ac6ab5098e31da03d71c3",
      "parents": [
        "0e139c7900628c1f52c598177878f03079e8958e"
      ],
      "author": {
        "name": "Zhi Yuan Ju",
        "email": "juzhiyuan@apache.org",
        "time": "Wed Jul 08 14:38:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 14:38:48 2026 +0800"
      },
      "message": "fix(log-rotate): reopen logs after partial rotation (#13375)"
    },
    {
      "commit": "0e139c7900628c1f52c598177878f03079e8958e",
      "tree": "582217e9e348cfa4849711e488734d6fb3918006",
      "parents": [
        "dadce3a29db85a6fb8580a25bb56985940c2d09b"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Wed Jul 08 14:20:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 14:20:06 2026 +0800"
      },
      "message": "feat(router): add match_uri_encoded_slash to keep %2F in path parameters (#13626)"
    },
    {
      "commit": "dadce3a29db85a6fb8580a25bb56985940c2d09b",
      "tree": "de9a745677d34c6fb0d2a9d51d196567977d2c34",
      "parents": [
        "03a727644e23120689cc97539ce5e3fe37b493bc"
      ],
      "author": {
        "name": "Traky Deng",
        "email": "trakydeng@gmail.com",
        "time": "Tue Jul 07 16:22:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 16:22:32 2026 +0800"
      },
      "message": "docs: update Debian APT repo instructions (#13660)"
    },
    {
      "commit": "03a727644e23120689cc97539ce5e3fe37b493bc",
      "tree": "34f328dd159f968bc6cf5466d7cfc419f8588536",
      "parents": [
        "2b6df4f3b31c2f3298b9c78719c17094a29dad02"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Tue Jul 07 16:15:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 16:15:35 2026 +0800"
      },
      "message": "feat(ai-aliyun-content-moderation): moderate system and tool role content (#13646)"
    },
    {
      "commit": "2b6df4f3b31c2f3298b9c78719c17094a29dad02",
      "tree": "05e4a66065688754ee51755274789155ffcb5bf1",
      "parents": [
        "333f46a5dc17d14d575b0caf83ef17c2204d2a00"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Tue Jul 07 15:29:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 13:14:03 2026 +0545"
      },
      "message": "refactor(ai-aws-content-moderation): moderate decoded LLM content in access phase (#13647)"
    },
    {
      "commit": "333f46a5dc17d14d575b0caf83ef17c2204d2a00",
      "tree": "6d63103c19050e7d505e87de322b6d37eba9164a",
      "parents": [
        "ca0c3187a6bfed7db6ae61725bad7bf699ac7b43"
      ],
      "author": {
        "name": "Surya Parua",
        "email": "surya.exce@gmail.com",
        "time": "Tue Jul 07 11:04:15 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 13:34:15 2026 +0800"
      },
      "message": "fix(dns): correct error() call in dns client initialization (#13358)"
    },
    {
      "commit": "ca0c3187a6bfed7db6ae61725bad7bf699ac7b43",
      "tree": "5a78a9a84e7a39a31fae1aa595f65d907b6e15a7",
      "parents": [
        "d0c3ceed12f14b90b43971a5e50406399749a388"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Tue Jul 07 13:33:56 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 13:33:56 2026 +0800"
      },
      "message": "fix(resource): support all plugin-bearing resource types in fetch_latest_conf (#13663)"
    },
    {
      "commit": "d0c3ceed12f14b90b43971a5e50406399749a388",
      "tree": "b9b1dc5230c491734fc014f82abd108e680dda32",
      "parents": [
        "070a78320a8a30bf92e806c894b7ed4ef2dd3550"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Tue Jul 07 10:59:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 10:59:34 2026 +0800"
      },
      "message": "feat(prometheus): add metrics for AI cache hits, misses, bypasses, and embedding latency (#13659)"
    },
    {
      "commit": "070a78320a8a30bf92e806c894b7ed4ef2dd3550",
      "tree": "bc2045444bf7ba526a673453d87d95cbf9e61751",
      "parents": [
        "4756428522cd23f26c1aa7bd07e9573be218f120"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Jul 06 19:28:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 17:13:16 2026 +0545"
      },
      "message": "test: assert admin metadata GET decrypts on first request (#13645)"
    },
    {
      "commit": "4756428522cd23f26c1aa7bd07e9573be218f120",
      "tree": "fab96d2fdd3569da836ca3bd58809634f76a9f75",
      "parents": [
        "7b9038835c0e0a6f39378a62bea4279e3a088ed2"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Jul 06 19:25:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 17:10:54 2026 +0545"
      },
      "message": "perf(loggly): hoist per-request closure out of log phase (#13648)"
    },
    {
      "commit": "7b9038835c0e0a6f39378a62bea4279e3a088ed2",
      "tree": "0a53f20500a5e7699c65d12f967e4d485b52de65",
      "parents": [
        "bb70ec008158a85cd0235fc64e1b8ad9e300c2ad"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Jul 06 19:09:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 16:54:33 2026 +0545"
      },
      "message": "perf(datadog): reuse one UDP socket per batch and coalesce metrics (#13653)\n\n* perf(datadog): reuse one UDP socket per batch and coalesce metrics\n\nThe datadog plugin opened a fresh UDP socket for every entry in a\nflushed batch and sent 6 separate datagrams per entry (request.counter,\nrequest.latency, upstream.latency, apisix.latency, ingress.size,\negress.size). For a batch of N entries this cost N socket setups and\n6N sendto syscalls.\n\nReuse a single socket across the whole batch and coalesce each entry\u0027s\nmetrics into one newline-delimited DogStatsD datagram, cutting the\nper-batch work to 1 socket setup and N sends. Newline-delimited\nmulti-metric packets are standard DogStatsD and parsed by the agent.\n\nThe test mock now splits received datagrams on newlines, as a real\nDogStatsD server does, so existing metric assertions still hold.\n\nSigned-off-by: Abhishek Choudhary \u003cshreemaan.abhishek@gmail.com\u003e\n\n* refactor(datadog): single checked socket close on the batch send path\n\nCollapse the send loop to a single exit so there is one checked\nsock:close() instead of an unchecked close on the failure path plus a\nchecked one at the end, matching the existing udp-logger idiom.\n\nSigned-off-by: Abhishek Choudhary \u003cshreemaan.abhishek@gmail.com\u003e\n\n---------\n\nSigned-off-by: Abhishek Choudhary \u003cshreemaan.abhishek@gmail.com\u003e"
    },
    {
      "commit": "bb70ec008158a85cd0235fc64e1b8ad9e300c2ad",
      "tree": "e06b50eaa9779638b616433c3717eea8ae1a8641",
      "parents": [
        "a2d34cd62a0c8c8981acfa13f3a6967832569ebd"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Jul 06 19:07:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 16:52:32 2026 +0545"
      },
      "message": "perf(zipkin): skip span tag construction for unsampled requests (#13656)"
    },
    {
      "commit": "a2d34cd62a0c8c8981acfa13f3a6967832569ebd",
      "tree": "a61e451ad42cd8ee87b956343d5305d7d903002d",
      "parents": [
        "b83f32374177250ce9a8922fc3103031710b18c2"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Fri Jul 03 19:30:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 03 17:15:02 2026 +0545"
      },
      "message": "feat(ai-cache): add streaming support with format tagging (#13644)"
    },
    {
      "commit": "b83f32374177250ce9a8922fc3103031710b18c2",
      "tree": "6ef4d67d7036f00ef6b904c24283e346f03e30eb",
      "parents": [
        "5e5554f8dc47ebbde88f5398d29d2c5c4463189b"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Fri Jul 03 18:01:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 03 15:46:26 2026 +0545"
      },
      "message": "fix(ai-cache): preserve non-text content in exact key and L2 bypass (#13654)"
    },
    {
      "commit": "5e5554f8dc47ebbde88f5398d29d2c5c4463189b",
      "tree": "b4303bb52a824784a02e1a457ea8c31c8da47edc",
      "parents": [
        "f6d0ee8040ccaf5da9f3f3b05a6ede8a86a66a9a"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Fri Jul 03 16:42:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 03 14:27:03 2026 +0545"
      },
      "message": "fix(forward-auth): re-frame buffered POST body for the auth request (#13642)"
    },
    {
      "commit": "f6d0ee8040ccaf5da9f3f3b05a6ede8a86a66a9a",
      "tree": "2e0f2e56b32ee0fa21f25c3355092f85e04c7177",
      "parents": [
        "d2f94b0246107f2db7700ab91565eb4d40706a15"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Thu Jul 02 18:16:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 02 16:01:32 2026 +0545"
      },
      "message": "fix(prometheus): truncate llm model-name labels to bound cardinality (#13637)"
    },
    {
      "commit": "d2f94b0246107f2db7700ab91565eb4d40706a15",
      "tree": "6932d5712108e6189bb2bd338f530d9ccea90657",
      "parents": [
        "11dfb18046d4af07fd4227901adb1b179b80a686"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Thu Jul 02 18:15:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 02 16:00:54 2026 +0545"
      },
      "message": "fix(opentelemetry): give inject_core_spans its own tracer cache key (#13633)"
    },
    {
      "commit": "11dfb18046d4af07fd4227901adb1b179b80a686",
      "tree": "8e2347908a0851e774f95e5c874e8f4c695e6883",
      "parents": [
        "01cf1e9d593db0c10d28e9d5887a553b53cddf6f"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Thu Jul 02 17:32:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 02 17:32:10 2026 +0800"
      },
      "message": "fix(ai-protocols): flatten structured message content in the protocol layer (#13634)"
    },
    {
      "commit": "01cf1e9d593db0c10d28e9d5887a553b53cddf6f",
      "tree": "a95d7288d5d738170a1ea2b9b12cf2fddbe4d891",
      "parents": [
        "7fd4515ee419de72b8877ef4e8c1c2027b59a2b4"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Thu Jul 02 12:48:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 02 10:33:01 2026 +0545"
      },
      "message": "refactor(cas-auth): drop unnecessary raw Cookie header fallback (#13635)"
    },
    {
      "commit": "7fd4515ee419de72b8877ef4e8c1c2027b59a2b4",
      "tree": "93276bcf6880b3388e2e34ee87cc0b785cbc1b07",
      "parents": [
        "b3182a5ba06f4987734cae767bda9ae8e5347342"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Thu Jul 02 12:28:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 02 12:28:15 2026 +0800"
      },
      "message": "feat(ai-cache): add semantic (L2) cache layer (#13632)"
    },
    {
      "commit": "b3182a5ba06f4987734cae767bda9ae8e5347342",
      "tree": "bb37f9db1516c8f795c9346829861f2e63c023aa",
      "parents": [
        "0e70e691947f35594117f63a3e2559f63f69fcc2"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Thu Jul 02 12:06:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 02 12:06:14 2026 +0800"
      },
      "message": "docs(mcp-bridge): add plugin doc and note upcoming deprecation (#13640)"
    },
    {
      "commit": "0e70e691947f35594117f63a3e2559f63f69fcc2",
      "tree": "e5546f6e1db5731eef16acee9e64382aa5f1e891",
      "parents": [
        "4215731562353dd3acf105b1d5e1ab61dbbbed95"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Wed Jul 01 18:54:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 16:39:39 2026 +0545"
      },
      "message": "fix: reset X-Forwarded-For only for untrusted sources under trusted_addresses (#13611)"
    },
    {
      "commit": "4215731562353dd3acf105b1d5e1ab61dbbbed95",
      "tree": "319cdbb1e631a72dcc37dddc8dcbc64d652dcf73",
      "parents": [
        "2f8178093f2c79040527bc76ccbe42394d4676bb"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Wed Jul 01 09:31:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 09:31:43 2026 +0800"
      },
      "message": "fix(ai-aliyun-content-moderation): return nil instead of ngx.OK in lua_body_filter (#13623)"
    },
    {
      "commit": "2f8178093f2c79040527bc76ccbe42394d4676bb",
      "tree": "3be050a1f017f28390355e2521c9b0efe9ce7f80",
      "parents": [
        "056bea5c97bae6d2fb2cb6cdd77b7bb69a9632f9"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Wed Jul 01 08:52:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 08:52:12 2026 +0800"
      },
      "message": "fix(healthcheck): purge stale targets and release periodic lock (bump lua-resty-healthcheck-api7 to 3.2.2) (#13627)"
    },
    {
      "commit": "056bea5c97bae6d2fb2cb6cdd77b7bb69a9632f9",
      "tree": "af96dd8d0c7384b6650abafa4e0894423ec4caee",
      "parents": [
        "6333d93674c728f267294b4cddf6e74bc81d03e5"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Tue Jun 30 16:50:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 16:50:28 2026 +0800"
      },
      "message": "test: make stream traffic-split distribution assertions order-independent (#13630)"
    },
    {
      "commit": "6333d93674c728f267294b4cddf6e74bc81d03e5",
      "tree": "221f4a99db1f521adf029472a004c62b033b5795",
      "parents": [
        "be3dde6df3cbed8c8995226493135d486cb342a3"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Tue Jun 30 15:05:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 15:05:29 2026 +0800"
      },
      "message": "fix(ai-lakera-guard): update alert mode behavior with fail_open option and add tests for streaming responses (#13622)"
    },
    {
      "commit": "be3dde6df3cbed8c8995226493135d486cb342a3",
      "tree": "5241bc387b295535683a16ee3382cab5b1a547a1",
      "parents": [
        "9f694b27c1f7d58fed0a18dffe0a955fe43eecd3"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Tue Jun 30 14:28:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 12:13:35 2026 +0545"
      },
      "message": "feat(elasticsearch-logger): encrypt headers field at rest (#13612)"
    },
    {
      "commit": "9f694b27c1f7d58fed0a18dffe0a955fe43eecd3",
      "tree": "e790f1f0d2ffbef9eaddc19a05f94b95397382a6",
      "parents": [
        "26a34723fd15305eba1f5eac0963adb28276b2c2"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Tue Jun 30 14:26:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 12:11:50 2026 +0545"
      },
      "message": "fix(workflow): skip the action plugin in the chain to avoid double execution (#13617)"
    },
    {
      "commit": "26a34723fd15305eba1f5eac0963adb28276b2c2",
      "tree": "39adbe73643366e79ff181a98788cdff5eadd2da",
      "parents": [
        "2c9e53c3e5e0cecad55a57751e5cccbb350090a2"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Tue Jun 30 14:26:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 12:11:37 2026 +0545"
      },
      "message": "fix(opentelemetry): recreate tracer object after plugin metadata changed (#13618)"
    },
    {
      "commit": "2c9e53c3e5e0cecad55a57751e5cccbb350090a2",
      "tree": "5221a86f84929317bb33ed1719d6d8bbfec6e969",
      "parents": [
        "e7d9abf5385f19ac2f50ffac1044b1eef5be9144"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Tue Jun 30 14:13:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 14:13:00 2026 +0800"
      },
      "message": "test: run graphql-proxy-cache and config-center-json suites in CI (#13621)"
    },
    {
      "commit": "e7d9abf5385f19ac2f50ffac1044b1eef5be9144",
      "tree": "b2e38ac77a22ba863ee8a36363fa6af0271bd2c5",
      "parents": [
        "196d585176c1f080151e1a60e411a52eef047665"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Mon Jun 29 17:25:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 17:25:06 2026 +0800"
      },
      "message": "feat: encrypt redis_password and sentinel_password in limit-count/limit-req/limit-conn (#13624)"
    },
    {
      "commit": "196d585176c1f080151e1a60e411a52eef047665",
      "tree": "cba79605a19be071b5d7e38589686683366e617a",
      "parents": [
        "43be2b97ec582960b93d7ecf592bd6f81e73668a"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Jun 29 17:18:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 15:03:26 2026 +0545"
      },
      "message": "fix(log-sanitize): return raw tables to avoid double delay_encode (#13605)"
    },
    {
      "commit": "43be2b97ec582960b93d7ecf592bd6f81e73668a",
      "tree": "957fceefdae71242a0b59838f447f39c609e3dbd",
      "parents": [
        "7f5638bb6a0e4326232b72b14d7779aac5d65151"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Mon Jun 29 12:38:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 12:38:54 2026 +0800"
      },
      "message": "fix(env): resolve os.getenv prefix collision for env directives (#13595)"
    },
    {
      "commit": "7f5638bb6a0e4326232b72b14d7779aac5d65151",
      "tree": "2b9f506f4e7e9db1ff548842c38e05acf78e4a21",
      "parents": [
        "cdcaea13b7f487e2f90f8ac708e9dd49f6dc2153"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Jun 29 11:31:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 09:16:13 2026 +0545"
      },
      "message": "fix(limit-count): upgrade redis-cluster lib so NOSCRIPT is not treated as node failure (#13579)"
    },
    {
      "commit": "cdcaea13b7f487e2f90f8ac708e9dd49f6dc2153",
      "tree": "22ff90b642dbe6014f7ee50e23fef8eaae818e23",
      "parents": [
        "e9ff2d266a9a57611b3ec15cf0d3c5216cfa2f39"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Mon Jun 29 11:12:07 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 11:12:07 2026 +0800"
      },
      "message": "ci: run proxy-cache and dubbo-proxy plugin subdirectory tests (#13613)"
    },
    {
      "commit": "e9ff2d266a9a57611b3ec15cf0d3c5216cfa2f39",
      "tree": "7555b2cb080cf5040e297170ec8c622605941407",
      "parents": [
        "89f8549886df2d0375426f5a001a95dff55cf6e0"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Jun 29 11:01:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 08:46:32 2026 +0545"
      },
      "message": "feat: add max_post_args_readable_size to bound post_arg.* body reads (#13601)"
    },
    {
      "commit": "89f8549886df2d0375426f5a001a95dff55cf6e0",
      "tree": "d9840a99cfcab3137eefd29ee2475b73c7393bbf",
      "parents": [
        "3ca5ddf3b9013ed7a654f9254194446eebb00f69"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Jun 29 11:00:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 08:45:49 2026 +0545"
      },
      "message": "fix(cas-auth): stop SLO callback POST from being proxied upstream (#13610)"
    },
    {
      "commit": "3ca5ddf3b9013ed7a654f9254194446eebb00f69",
      "tree": "b326c39f6324c440b219fdf8f0cdcabb9f968b4a",
      "parents": [
        "30ed8d7d152256532c3711d31f8335b4501d4966"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Mon Jun 29 10:59:13 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 09:59:13 2026 +0800"
      },
      "message": "feat(ai-lakera-guard): scan LLM responses (direction output/both, non-streaming + streaming) (#13606)"
    },
    {
      "commit": "30ed8d7d152256532c3711d31f8335b4501d4966",
      "tree": "40bb01911cb4cad967d38909324b0c1c03b9195f",
      "parents": [
        "57708db45691a243bd3384c8013e7799b1a2b32a"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Mon Jun 29 10:59:01 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 09:59:01 2026 +0800"
      },
      "message": "feat: add ai-cache plugin (#13578)"
    },
    {
      "commit": "57708db45691a243bd3384c8013e7799b1a2b32a",
      "tree": "b15dee19d0609f46cc5fec556a33746d065892da",
      "parents": [
        "496cb68c47db836b3cdecda0281dfb94de11b27f"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Mon Jun 29 08:32:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 08:32:27 2026 +0800"
      },
      "message": "fix(stream): support upstream client certificate (mTLS) in L4 proxy (#13596)"
    },
    {
      "commit": "496cb68c47db836b3cdecda0281dfb94de11b27f",
      "tree": "a7440769f9fe16782b688788d9ca919cae253a1b",
      "parents": [
        "df0a28425350541b3ac09c4403688d5f11b6ab8f"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Fri Jun 26 20:18:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 26 18:03:26 2026 +0545"
      },
      "message": "fix(ai-proxy-multi): guard construct_upstream in healthcheck timers (#13592)"
    },
    {
      "commit": "df0a28425350541b3ac09c4403688d5f11b6ab8f",
      "tree": "4aaf6f0e335236584d8ec0bca468a7f2819803d2",
      "parents": [
        "c24803a002ce51c82b250ebaf1c39d856b1ed2ad"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Fri Jun 26 14:23:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 26 14:23:49 2026 +0800"
      },
      "message": "feat(ai-proxy): include AI observability vars in llm_summary"
    },
    {
      "commit": "c24803a002ce51c82b250ebaf1c39d856b1ed2ad",
      "tree": "711dd3294ceac30276f15e47c2650d90063608e9",
      "parents": [
        "841dbea7a167684e6b9834c33e841ea61693a100"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Fri Jun 26 11:56:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 26 11:56:16 2026 +0800"
      },
      "message": "test(openid-connect): stop logout tests from calling live IdPs (#13608)"
    },
    {
      "commit": "841dbea7a167684e6b9834c33e841ea61693a100",
      "tree": "5db21c31a975a7cbac11640ce24312191dbe9ae3",
      "parents": [
        "bb23888cd786d412ef42fc7de161797faff441b6"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Thu Jun 25 07:26:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 25 07:26:03 2026 +0800"
      },
      "message": "fix(ai-proxy): don\u0027t abort Anthropic response on bad tool_call arguments (#13599)"
    },
    {
      "commit": "bb23888cd786d412ef42fc7de161797faff441b6",
      "tree": "ca05bfd287db50749232efcf2547546d5d528525",
      "parents": [
        "0c41c86658a9defcb05c4842969fff19e73ef25f"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Wed Jun 24 20:28:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 20:28:01 2026 +0800"
      },
      "message": "feat(ai-aliyun-content-moderation): role-aware request_check_mode and O(n) content chunking (#13598)"
    },
    {
      "commit": "0c41c86658a9defcb05c4842969fff19e73ef25f",
      "tree": "2469892449fe19baf3e403b8ceddbc49dfcf43d4",
      "parents": [
        "eb20eb2c8da4051bc084e0c3ebb11fb1833f50bf"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Wed Jun 24 18:11:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 18:11:34 2026 +0800"
      },
      "message": "fix(prometheus): bump nginx-lua-prometheus-api7 to 0.20260623 to drop duplicate metrics (#13602)"
    },
    {
      "commit": "eb20eb2c8da4051bc084e0c3ebb11fb1833f50bf",
      "tree": "25528559d94a15857e585e9fdd46108ad07ce9fd",
      "parents": [
        "d3f198486af31518e1bf039fc604d90008f732f5"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Wed Jun 24 17:17:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 15:02:28 2026 +0545"
      },
      "message": "fix(limit-conn): isolate counter per workflow action via _vid key (#13591)"
    },
    {
      "commit": "d3f198486af31518e1bf039fc604d90008f732f5",
      "tree": "8234c94b057e6f174915c75b8f37faa8ae7a2c25",
      "parents": [
        "d0451ff4a81c86c8e76eb5c3bf3ba42caeb006c4"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Wed Jun 24 17:16:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 15:01:58 2026 +0545"
      },
      "message": "fix(attach-consumer-label): always drop client-supplied configured headers (#13590)"
    },
    {
      "commit": "d0451ff4a81c86c8e76eb5c3bf3ba42caeb006c4",
      "tree": "433ad5eb9d2c3e1e7c929d00d5f6751ed4b17c9e",
      "parents": [
        "c95615265b5d34a103113746cde8405fb197f954"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Wed Jun 24 14:45:18 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 13:45:18 2026 +0800"
      },
      "message": "feat: add ai-lakera-guard plugin (#13570)"
    },
    {
      "commit": "c95615265b5d34a103113746cde8405fb197f954",
      "tree": "ff423c1ed0ab0be866f242d8a908bb9dc05fa540",
      "parents": [
        "fe625ffc3b54cf4a86a21c7923b89875871d690a"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Wed Jun 24 13:27:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 11:12:02 2026 +0545"
      },
      "message": "fix(limit-count): validate variable-resolved count/time_window bounds (#13573)"
    },
    {
      "commit": "fe625ffc3b54cf4a86a21c7923b89875871d690a",
      "tree": "7de54ed46f3214a8868e026598bc5f6965b77b59",
      "parents": [
        "a40d08dc7211673ae103cad1d9c0c70312231c6d"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Wed Jun 24 08:16:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 24 08:16:20 2026 +0800"
      },
      "message": "fix(ai-proxy): drop tool_choice without tools and stop hanging Anthropic stream (#13583)"
    },
    {
      "commit": "a40d08dc7211673ae103cad1d9c0c70312231c6d",
      "tree": "0f3f1205869891dcb2e02ad790db40c1ee27038a",
      "parents": [
        "d7f6f953765860ab53a81d06ec68c1460a7ca203"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Tue Jun 23 14:54:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 12:39:44 2026 +0545"
      },
      "message": "fix(limit-count): make sliding-window limiter check-and-increment atomic (#13574)"
    }
  ],
  "next": "d7f6f953765860ab53a81d06ec68c1460a7ca203"
}
