)]}'
{
  "log": [
    {
      "commit": "64a4afdd1353bd302f03cc8f0f780b8a78176137",
      "tree": "a6f04a1fe655917116527b6918fa3a954d9ed370",
      "parents": [
        "2e43b6c605566d383378a45ef1f06f3debf48a42"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Thu Oct 15 14:26:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 14:26:28 2026 +0800"
      },
      "message": "fix(ai-proxy): include cache tokens in Anthropic prompt usage and read them from message_delta (#14028)"
    },
    {
      "commit": "2e43b6c605566d383378a45ef1f06f3debf48a42",
      "tree": "6abff0f587b9dccf30013fee2cc44b359625a5e5",
      "parents": [
        "6a3a76648d5a017f82f0363b82b879f2a9935e85"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Wed Oct 14 14:24:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 14:24:01 2026 +0800"
      },
      "message": "feat(consul): support https consul server addresses (#14018)"
    },
    {
      "commit": "6a3a76648d5a017f82f0363b82b879f2a9935e85",
      "tree": "2832ab68200c70d8a1d30da2a544b02758821756",
      "parents": [
        "e79d37789de91dde23060e342265e7e189e0ba7f"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Wed Oct 14 10:38:42 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 10:38:42 2026 +0800"
      },
      "message": "fix(consul): run the catalog and health watchers as independent timers (#14032)"
    },
    {
      "commit": "e79d37789de91dde23060e342265e7e189e0ba7f",
      "tree": "0ebed53334193bdec1b0bfa0310fe56cbb69c94e",
      "parents": [
        "3551401b4b5a8d9f39cc94eef517d9b9dc192e83"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Tue Oct 13 14:52:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 14:52:50 2026 +0800"
      },
      "message": "docs(limit-count): correct when the delayed-sync snapshot is refreshed (#14017)"
    },
    {
      "commit": "3551401b4b5a8d9f39cc94eef517d9b9dc192e83",
      "tree": "a69a0f016079484fdc836825e34d2bed4aa1dfb5",
      "parents": [
        "a5ddc1cf74a0a23c2c6f90f4d6b83021a84c8fdd"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Oct 12 17:57:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 15:42:52 2026 +0545"
      },
      "message": "feat: add the request-decompress plugin (#14016)\n\n* feat: add the request-decompress plugin\n\nDecompresses a gzip or deflate request body and rewrites the request with\nit, so every plugin that reads the body sees the plain content.\nforward_compressed keeps the upstream receiving a compressed body.\n\nDecompression itself lives in core.request.get_body behind opts.decompress,\noff by default, so callers that need the bytes as they arrived are\nunaffected. The inflate helper moves to apisix/utils/gzip.lua, which\ncontent-decode.lua now shares instead of carrying its own copy.\n\n* fix: read the current body through core before compressing\n\nA plugin that moves the body to a temp file leaves ngx.req.get_body_data()\nnil, and the upstream then received a compressed empty body.\n\n* fix: address the review on the request-decompress plugin\n\ninflate_gzip consumed only the first member of a concatenated gzip\nstream, so a multi-member body was silently truncated. It now inflates\nevery member, bounds their total by one cumulative counter, and rejects\nbytes trailing the last member.\n\nThe plugin on both a global rule and a route compressed the body twice.\nrun_policy prefer_route hands the request to the route\u0027s instance, and\nthe forwarding state is consumed on first use.\n\nA body over max_req_body_size answered 500. read_body now classifies a\nsize violation as too_large and get_body passes the kind on, so the\nContent-Length, chunked and file-backed paths all answer 413.\n\n* fix: restore every coding and surface a failed body read\n\ncore.request.header collapses a repeated header to its first value, so a\nrequest with two Content-Encoding lines had a twice compressed body\nrestored under a single coding. The header is now rebuilt from the parsed\ncoding list, which makes the stored header value redundant.\n\nAn unreadable body file left before_proxy compressing an empty string and\nforwarding it. The read failure is now an error.\n\n* test: remove the body file instead of locking it\n\nCI runs as root, which reads straight through a file whose permissions\nwere dropped, so the read in before_proxy succeeded there and the block\nsaw a 200. Removing the file fails the read for every uid.\n\n* refactor: keep request body decompression inside the plugin\n\nContent-Encoding parsing and inflation lived in core.request behind\nopts.decompress, with the plugin as the only caller, so both move into\nthe plugin and core.request.get_body keeps its old signature.\n\nWhat stays in core is the size classification: the Content-Length and\nbody-file checks run inside get_body, so only it can tell a body over\nthe cap from a body that could not be read, and the plugin answers 413\nor 500 on that. No new API, one extra return value on the failure path.\n\nSigned-off-by: Shreemaan Abhishek \u003cshreemaan.abhishek@gmail.com\u003e\n\n* docs: say which phase stops seeing the plain body\n\nforward_compressed restores the compressed body before the request is\nproxied, so the log phase reads it. Two sentences claimed the plain body\nfor every plugin on the route without that qualification.\n\nSigned-off-by: Shreemaan Abhishek \u003cshreemaan.abhishek@gmail.com\u003e\n\n---------\n\nSigned-off-by: Shreemaan Abhishek \u003cshreemaan.abhishek@gmail.com\u003e"
    },
    {
      "commit": "a5ddc1cf74a0a23c2c6f90f4d6b83021a84c8fdd",
      "tree": "135dcec8841152dba0b78a4e3e5801f24c52cd51",
      "parents": [
        "323997dda2f684c98c272c7c615f4743ff91c41f"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Fri Oct 09 15:24:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 09 13:09:37 2026 +0545"
      },
      "message": "feat!: remove the deprecated mcp-bridge plugin (#14019)"
    },
    {
      "commit": "323997dda2f684c98c272c7c615f4743ff91c41f",
      "tree": "67d4ad1a8e9f2eb78beacc0f29924258e1146558",
      "parents": [
        "88c4b8c47d9d59725d22e02aca0364388c76e51f"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Fri Oct 09 00:12:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 21:57:30 2026 +0545"
      },
      "message": "docs(forward-auth): clarify that X-Forwarded-* carry the client request (#13978)"
    },
    {
      "commit": "88c4b8c47d9d59725d22e02aca0364388c76e51f",
      "tree": "7fd45b7f195551d59ae66e973a7785873d0ebacd",
      "parents": [
        "9bd84f4f27fe489a9c2fcbd7daaf4819323a5fa1"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Thu Oct 08 18:08:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 18:08:52 2026 +0800"
      },
      "message": "fix(limit-count): refresh the delayed-sync quota after the local delta expired (#14015)"
    },
    {
      "commit": "9bd84f4f27fe489a9c2fcbd7daaf4819323a5fa1",
      "tree": "7bfedef59c14c33a2e32c0e9c9766fd6229ddd07",
      "parents": [
        "cbd07d0f5623505490f47a117d58ef7b3ccbad05"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Thu Oct 08 16:46:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 14:31:08 2026 +0545"
      },
      "message": "chore: migrate branch protection to rulesets (#13955)"
    },
    {
      "commit": "cbd07d0f5623505490f47a117d58ef7b3ccbad05",
      "tree": "d9787e1ac30914eef404b1a5fdf68c338236c8c7",
      "parents": [
        "2b98a717fc06a652fe5966019f71f8f885d98b70"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Thu Oct 08 16:27:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 16:27:34 2026 +0800"
      },
      "message": "feat(limit-count): report the counting window in $rate_limiting_info (#13996)"
    },
    {
      "commit": "2b98a717fc06a652fe5966019f71f8f885d98b70",
      "tree": "163e0804422bb69abffbb9b9f28339e53019ee0b",
      "parents": [
        "2ee8dfa810b03da1972b88e024f46c61b1e1716e"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Thu Oct 08 15:13:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 15:13:31 2026 +0800"
      },
      "message": "feat(kubernetes): select clusters by discovery_args.cluster_ids (#13991)"
    },
    {
      "commit": "2ee8dfa810b03da1972b88e024f46c61b1e1716e",
      "tree": "99dbd5a229287378333fa2923493a23b5e451bc8",
      "parents": [
        "c6b2adc32ed358ee68c83b91de21d951b9c000a0"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Thu Oct 08 13:58:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 13:58:11 2026 +0800"
      },
      "message": "feat(prometheus): add service and service_id to the stream metrics (#13992)"
    },
    {
      "commit": "c6b2adc32ed358ee68c83b91de21d951b9c000a0",
      "tree": "46487cec39ed2e20ec4d0bc70c471ef740c2da02",
      "parents": [
        "ee7dc10b45b5791f44150d89051eacb8fdde05de"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Sep 28 16:15:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 28 14:00:37 2026 +0545"
      },
      "message": "feat(ai-rate-limiting): expose nested usage fields to cost_expr (#13984)"
    },
    {
      "commit": "ee7dc10b45b5791f44150d89051eacb8fdde05de",
      "tree": "8e09a9ac975892c07886ebbf60a168a4dc28da4d",
      "parents": [
        "d97d5f725708927412332aab5062be8028d2fb03"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Sep 28 13:15:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 28 11:00:19 2026 +0545"
      },
      "message": "chore: release 3.19.0 (#13976)"
    },
    {
      "commit": "d97d5f725708927412332aab5062be8028d2fb03",
      "tree": "4006ae0a787614ceb74976d47cf43b52d914bc9d",
      "parents": [
        "271e799696370769ef3ab876f89f21951414dc3b"
      ],
      "author": {
        "name": "Zeping Bai",
        "email": "bzp2010@apache.org",
        "time": "Mon Sep 28 12:42:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 28 12:42:29 2026 +0800"
      },
      "message": "ci(test): migrate from jest to vitest (#13989)"
    },
    {
      "commit": "271e799696370769ef3ab876f89f21951414dc3b",
      "tree": "148afed058e43a16a2215b7ef9783696404304ce",
      "parents": [
        "97b612204acbb68c0143f89d077d5a459b65ba00"
      ],
      "author": {
        "name": "Zeping Bai",
        "email": "bzp2010@apache.org",
        "time": "Tue Sep 22 09:22:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 22 09:22:35 2026 +0800"
      },
      "message": "fix(websocket): address review findings on the ws/wss proxy path (#13977)"
    },
    {
      "commit": "97b612204acbb68c0143f89d077d5a459b65ba00",
      "tree": "38196825d7e7ef156e4d488c0604ac158f4ce57a",
      "parents": [
        "52eb4e31c6fdcc45a4426dcc55473faf59a3888c"
      ],
      "author": {
        "name": "Zeping Bai",
        "email": "bzp2010@apache.org",
        "time": "Mon Sep 21 14:45:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 14:45:52 2026 +0800"
      },
      "message": "feat(websocket): add plugin to customize proxy behaviors (#13972)"
    },
    {
      "commit": "52eb4e31c6fdcc45a4426dcc55473faf59a3888c",
      "tree": "2e25f644890c4ed466151bb3f491bff7e3f9fd5a",
      "parents": [
        "3d64360a6db7fbcfbb8206e19b1639111176b4ac"
      ],
      "author": {
        "name": "Zeping Bai",
        "email": "bzp2010@apache.org",
        "time": "Fri Sep 18 16:28:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 16:28:16 2026 +0800"
      },
      "message": "feat(websocket): add enhanced proxy and plugin hook (#13939)"
    },
    {
      "commit": "3d64360a6db7fbcfbb8206e19b1639111176b4ac",
      "tree": "6ae1f8bb8caea1c73d14fd40c0a5be38e73cee27",
      "parents": [
        "c4776e85fe1e5674bf2e523a38ab1966d9c6402c"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Fri Sep 18 16:04:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 13:49:09 2026 +0545"
      },
      "message": "feat(saml-auth): add lua-resty-saml 0.2.6 validation options (#13964)"
    },
    {
      "commit": "c4776e85fe1e5674bf2e523a38ab1966d9c6402c",
      "tree": "00eba5d3144f4be148b84d6eb06529372d0aba02",
      "parents": [
        "789d4b8220f9d54c0cd20f8e921639b164bbfd84"
      ],
      "author": {
        "name": "Yilia Lin",
        "email": "Yilialin@apache.org",
        "time": "Fri Sep 18 13:56:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 13:56:10 2026 +0800"
      },
      "message": "docs: fix traffic-split attribute table rendering (#13965)"
    },
    {
      "commit": "789d4b8220f9d54c0cd20f8e921639b164bbfd84",
      "tree": "4c699d535a78413d053a2828ebf2b89356b08cbd",
      "parents": [
        "694fd352a15ec5ef0b34d1e9ece5e55e9daa2bfd"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Thu Sep 17 16:52:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 16:52:16 2026 +0800"
      },
      "message": "fix(openapi-to-mcp): apply defaults, keep SSE variables, reject non-OpenAPI documents (#13956)"
    },
    {
      "commit": "694fd352a15ec5ef0b34d1e9ece5e55e9daa2bfd",
      "tree": "0bf96c9d1101ae4edd798544825fdbbbf76e2336",
      "parents": [
        "b172d640c754e4b8911bdf0ac41d095d686a3629"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Thu Sep 17 15:41:53 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 14:41:53 2026 +0800"
      },
      "message": "fix(ext-plugin-post-resp): set upstream_addr and upstream_response_time for loggers (#13940)"
    },
    {
      "commit": "b172d640c754e4b8911bdf0ac41d095d686a3629",
      "tree": "e2e514eee1a62d463ffa4f801d095329b833e1a2",
      "parents": [
        "c525ae5c8f01defeaaf0b10c979bc642e5c82dfc"
      ],
      "author": {
        "name": "Zeping Bai",
        "email": "bzp2010@apache.org",
        "time": "Thu Sep 17 11:03:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 11:03:39 2026 +0800"
      },
      "message": "ci: fix dev image push (#13930)"
    },
    {
      "commit": "c525ae5c8f01defeaaf0b10c979bc642e5c82dfc",
      "tree": "63789fbc2a0d20fb32d41eb8b8ce66912e456005",
      "parents": [
        "0890d2de36958de3e35abf596cacd902b646df57"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Thu Sep 17 09:01:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 09:01:32 2026 +0800"
      },
      "message": "feat(upstream): slow start for newly observed upstream nodes (#13941)"
    },
    {
      "commit": "0890d2de36958de3e35abf596cacd902b646df57",
      "tree": "e18b6109c93a2536c373ab3245f76199104d1db9",
      "parents": [
        "e564adb840c6179dab536e2f6a4ea95987f0ab5c"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Thu Sep 17 01:45:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 23:30:00 2026 +0545"
      },
      "message": "fix(feishu-auth, dingtalk-auth): bind the authorization code to the session that started the login (#13806)"
    },
    {
      "commit": "e564adb840c6179dab536e2f6a4ea95987f0ab5c",
      "tree": "4cbff69a3272e85c461f56f2bd2232867eda9521",
      "parents": [
        "32cdc622777d2b5889671ea971b98b9dc8ed79c5"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Wed Sep 16 18:05:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 18:05:30 2026 +0800"
      },
      "message": "feat: add openapi-to-mcp plugin (#13942)"
    },
    {
      "commit": "32cdc622777d2b5889671ea971b98b9dc8ed79c5",
      "tree": "dbdb18150e067d24230efc5f6c7dcc5e2a79b56d",
      "parents": [
        "8615934a9d5575f4d4632bcbdb3cda941cc1d683"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Wed Sep 16 15:19:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 15:19:12 2026 +0800"
      },
      "message": "feat(stream): match a stream route by several SNIs (#13911)"
    },
    {
      "commit": "8615934a9d5575f4d4632bcbdb3cda941cc1d683",
      "tree": "ef187a624dceecd37ea8dcdd486aae24c25c6159",
      "parents": [
        "5e784af30d19ce508de5b88c5d438ddf69d156e0"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Wed Sep 16 13:36:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 13:36:05 2026 +0800"
      },
      "message": "test: stabilize plugin tests and cover CI bailouts (#13948)"
    },
    {
      "commit": "5e784af30d19ce508de5b88c5d438ddf69d156e0",
      "tree": "7fcea8ec062c5e1a7dbb919af73f6d491bf4ae78",
      "parents": [
        "4278bc9ae5e6322a0ef222e047e8395f05829b62"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Tue Sep 15 17:52:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 17:52:11 2026 +0800"
      },
      "message": "fix(ai-proxy): avoid aborting streams on empty flushes (#13947)"
    },
    {
      "commit": "4278bc9ae5e6322a0ef222e047e8395f05829b62",
      "tree": "a4281a5368ec09c665657aa1c96f797f708010de",
      "parents": [
        "d5ea736a7d1219b7730e20fe067b2449485d6f5b"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Tue Sep 15 16:15:42 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 15:15:42 2026 +0800"
      },
      "message": "fix(redis): send the TLS SNI and add redis_server_name (#13938)"
    },
    {
      "commit": "d5ea736a7d1219b7730e20fe067b2449485d6f5b",
      "tree": "0ea76fa23e198c71f68d45bbceb39998857cc76c",
      "parents": [
        "d13105e1789ce11137065128c35260c8bb9d9ce7"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Sep 14 18:37:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 16:22:25 2026 +0545"
      },
      "message": "fix(etcd): check availability before starting watcher (#13934)"
    },
    {
      "commit": "d13105e1789ce11137065128c35260c8bb9d9ce7",
      "tree": "b70cac5b903380d42c7cf45d6a6eb101bf283529",
      "parents": [
        "a1e02b89ac801f8c68d9b7a5b2cdf94382460239"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Mon Sep 14 16:09:21 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 15:09:21 2026 +0800"
      },
      "message": "test(xds): wait for the privileged agent\u0027s startup sync before flush_all in TEST 4 (#13937)"
    },
    {
      "commit": "a1e02b89ac801f8c68d9b7a5b2cdf94382460239",
      "tree": "034eb1a4c207bc598cf3ca936e619a8f7e98a951",
      "parents": [
        "a508d83de4a6aed4ab31dce728f9d3578d80f58c"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Mon Sep 14 11:57:22 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 10:57:22 2026 +0800"
      },
      "message": "test(elasticsearch-logger): drop the max_pending_entries metadata after the discard test (#13924)"
    },
    {
      "commit": "a508d83de4a6aed4ab31dce728f9d3578d80f58c",
      "tree": "d4446e8e83fcf39f1c5252c521becd6c08131be1",
      "parents": [
        "b95627061c0554267e7e037f3ff88b7a0f4300c3"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Fri Sep 11 18:36:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 16:21:45 2026 +0545"
      },
      "message": "fix(plugin): align unavailable plugin handling (#13928)"
    },
    {
      "commit": "b95627061c0554267e7e037f3ff88b7a0f4300c3",
      "tree": "13438c5520f3c2b60b894e4360d22f3900a31919",
      "parents": [
        "c3141d49c01fc704ba3baba8892427806b636160"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Fri Sep 11 18:36:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 16:21:15 2026 +0545"
      },
      "message": "fix(openid-connect): validate introspection issuer (#13916)"
    },
    {
      "commit": "c3141d49c01fc704ba3baba8892427806b636160",
      "tree": "9417adf1a58e242ac0cab1485672776eb417dac4",
      "parents": [
        "efef0e8413aec9e3c3fb0e9dc8d48cf4c3fa4cb3"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Fri Sep 11 18:34:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 16:19:28 2026 +0545"
      },
      "message": "fix(batch-requests): bound aggregated response bodies (#13906)"
    },
    {
      "commit": "efef0e8413aec9e3c3fb0e9dc8d48cf4c3fa4cb3",
      "tree": "a66314f0a815db607260e9d248396df901f49efd",
      "parents": [
        "9aee46aaabb6848305034716998dadf9ed11e488"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Fri Sep 11 00:19:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 22:04:58 2026 +0545"
      },
      "message": "docs(changelog): add the 3.18.0 section to the Chinese changelog (#13843)\n\nSigned-off-by: Abhishek Choudhary \u003cshreemaan.abhishek@gmail.com\u003e"
    },
    {
      "commit": "9aee46aaabb6848305034716998dadf9ed11e488",
      "tree": "97dfdcdd956ba4d9e2813e91b4200ff7fd09625e",
      "parents": [
        "09b19c609c3021c72b9cde5b71fff090634b5299"
      ],
      "author": {
        "name": "Arjen10",
        "email": "thistime833@gmail.com",
        "time": "Thu Sep 10 14:00:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 10 14:00:28 2026 +0800"
      },
      "message": "fix(workflow): reject invalid case expressions and missing action conf (#13862)"
    },
    {
      "commit": "09b19c609c3021c72b9cde5b71fff090634b5299",
      "tree": "b7ee60e8ec5befa2418d600eb8ed7d4c583cdc5d",
      "parents": [
        "1f6120d19bf4935df1cf9a5647fa7f8cb40f28e5"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Wed Sep 09 13:37:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 13:37:37 2026 +0800"
      },
      "message": "fix: preserve servlet upstream URI boundaries (#13914)"
    },
    {
      "commit": "1f6120d19bf4935df1cf9a5647fa7f8cb40f28e5",
      "tree": "0a68bf88029b6a76c56aa509cd443b9d45809e0d",
      "parents": [
        "96a4e7cc4c18e67c5645c389b3e0096b3f47c29b"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Wed Sep 09 13:27:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 13:27:32 2026 +0800"
      },
      "message": "fix(ai-aliyun-content-moderation): report final results without usage (#13922)"
    },
    {
      "commit": "96a4e7cc4c18e67c5645c389b3e0096b3f47c29b",
      "tree": "39c5953ccbaaddab233628ce288ba7d14ea550ca",
      "parents": [
        "316aea792eae20e69e8109d781e5629998735c91"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Wed Sep 09 13:27:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 09 13:27:19 2026 +0800"
      },
      "message": "fix(ci): stop rerun_flaky_tests from turning unparsable failures into a pass (#13923)"
    },
    {
      "commit": "316aea792eae20e69e8109d781e5629998735c91",
      "tree": "9294cd55b36bb2c9ebb99afd2cc1b11023e5d06d",
      "parents": [
        "fae270412cfb739dc96aeeae5154946be5654831"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Tue Sep 08 09:05:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 09:05:22 2026 +0800"
      },
      "message": "fix(standalone): harden the declarative configuration paths (#13886)"
    },
    {
      "commit": "fae270412cfb739dc96aeeae5154946be5654831",
      "tree": "e3b677df570610680fdc484511f5b9f9a796b82e",
      "parents": [
        "57b401dab32351178404d693ea658989ce52fca5"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Mon Sep 07 15:22:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 15:22:58 2026 +0800"
      },
      "message": "fix(ci): unbreak CI under pnpm 12 (#13921)"
    },
    {
      "commit": "57b401dab32351178404d693ea658989ce52fca5",
      "tree": "a7d9f2bf7e803d733821a831e2f6e8a752cb16fe",
      "parents": [
        "f3623982ef0e2d6de41306f637caf08ff0ef59ac"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Mon Sep 07 14:51:42 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 14:51:42 2026 +0800"
      },
      "message": "feat(stream): support TLS passthrough on the stream proxy (#13912)"
    },
    {
      "commit": "f3623982ef0e2d6de41306f637caf08ff0ef59ac",
      "tree": "22162e921e7704bf5f3857e6a1680c454c6a034a",
      "parents": [
        "978dfce917432c90c90e68520dbe70da75026292"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Mon Sep 07 12:31:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 12:31:02 2026 +0800"
      },
      "message": "fix(etcd): watch from the revision the configuration was read at (#13917)"
    },
    {
      "commit": "978dfce917432c90c90e68520dbe70da75026292",
      "tree": "fcd74f76aa0e267dea1dd18d55e4af3c07b76ff5",
      "parents": [
        "494dc42299d3bd9e9edc5be13c713a5946d525a1"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Fri Sep 04 14:38:21 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 13:38:21 2026 +0800"
      },
      "message": "fix: write request_type\u003dwebsocket through ctx.var (#13915)"
    },
    {
      "commit": "494dc42299d3bd9e9edc5be13c713a5946d525a1",
      "tree": "6199f3448dba0deab11b3a8891ffd9d450009bcd",
      "parents": [
        "15a438183bfbba4581ade6f7d263e3636ce38578"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Thu Sep 03 15:24:51 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 14:24:51 2026 +0800"
      },
      "message": "feat: label WebSocket sessions with request_type\u003dwebsocket (#13909)"
    },
    {
      "commit": "15a438183bfbba4581ade6f7d263e3636ce38578",
      "tree": "bb29e04505408201775291f837526bb35886e243",
      "parents": [
        "9fc501f03aa72d12a8b73e0ddf8a8e50afca4880"
      ],
      "author": {
        "name": "Zeping Bai",
        "email": "bzp2010@apache.org",
        "time": "Wed Sep 02 17:41:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 17:41:28 2026 +0800"
      },
      "message": "feat: improve API-driven standalone update reliability (#13904)"
    },
    {
      "commit": "9fc501f03aa72d12a8b73e0ddf8a8e50afca4880",
      "tree": "136173293ef49d42a3f3a05ab6fd08c1dbfaf105",
      "parents": [
        "f0bb251a97652bb655b03e39e81fda1a3e1e93b2"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Wed Sep 02 17:21:54 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 16:21:54 2026 +0800"
      },
      "message": "fix(aws-lambda): request \"/\" for a path-less function_uri and log function error responses (#13908)\n\nFixes #11176"
    },
    {
      "commit": "f0bb251a97652bb655b03e39e81fda1a3e1e93b2",
      "tree": "81420904435b0a3d417ca4b5dde0a3aaae5a248d",
      "parents": [
        "96a5b43d521322be96128b0eb9d3aa7df76ce363"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Tue Sep 01 18:56:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 16:41:02 2026 +0545"
      },
      "message": "fix(ai-cache): key the passthrough protocol on the client method, path and query (#13887)"
    },
    {
      "commit": "96a5b43d521322be96128b0eb9d3aa7df76ce363",
      "tree": "74d3a16e5abe1cd6c481a89bb87bcb35bf4cedcc",
      "parents": [
        "89e627384571c78f73e188c340a3b19861986c69"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Tue Sep 01 18:24:37 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 17:24:37 2026 +0800"
      },
      "message": "test(skywalking): remove worker-0 dependency in backend timer assertion (#13902)"
    },
    {
      "commit": "89e627384571c78f73e188c340a3b19861986c69",
      "tree": "6d5df744595a60ed2c7c5fe4af0470d67aea29b1",
      "parents": [
        "385b80a6ed1b38b8df3f4f2515601f70a78f2c68"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Tue Sep 01 15:45:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 15:45:44 2026 +0800"
      },
      "message": "feat(control-api): report the health checks a plugin owns (#13899)"
    },
    {
      "commit": "385b80a6ed1b38b8df3f4f2515601f70a78f2c68",
      "tree": "66abc0532554d0a895d6135bba8ff2ee23a3f81c",
      "parents": [
        "51fad8a897d538a68b8283d1e9a428363889df0a"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Tue Sep 01 14:42:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 14:42:27 2026 +0800"
      },
      "message": "fix(jwe-decrypt): accept JWE tokens that authenticate the protected header (#13889)"
    },
    {
      "commit": "51fad8a897d538a68b8283d1e9a428363889df0a",
      "tree": "c269e0c7c10b176f147d1b4beae53bbe171f4663",
      "parents": [
        "bd8ac3a86dd9753e4e4c17b0d28abfd01b68021f"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Tue Sep 01 14:31:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 14:31:01 2026 +0800"
      },
      "message": "fix(traffic-label): cache the compiled match expressions outside the plugin config (#13901)"
    },
    {
      "commit": "bd8ac3a86dd9753e4e4c17b0d28abfd01b68021f",
      "tree": "04b5a0fa1a863d5e77e110cfd87a4d447437d108",
      "parents": [
        "f80e42c2fb6787b4a22f9fbbbd54ac4f75c76bb0"
      ],
      "author": {
        "name": "Ming Wen",
        "email": "moonbingbing@gmail.com",
        "time": "Tue Sep 01 12:36:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 12:36:38 2026 +0800"
      },
      "message": "docs: add LocalAI integration tutorial (#13770)"
    },
    {
      "commit": "f80e42c2fb6787b4a22f9fbbbd54ac4f75c76bb0",
      "tree": "4c518bd349c4cd30edd794bb59c27b197d922f94",
      "parents": [
        "10e61e0fdad296fe89368e73e9b0dbdb452e6197"
      ],
      "author": {
        "name": "Arjen10",
        "email": "thistime833@gmail.com",
        "time": "Tue Sep 01 10:16:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 10:16:27 2026 +0800"
      },
      "message": "fix(basic-auth): split credentials on the first colon only (#13836)"
    },
    {
      "commit": "10e61e0fdad296fe89368e73e9b0dbdb452e6197",
      "tree": "5e3f4f291431d9640958b0b7c372a3f6dc59976b",
      "parents": [
        "d53d855c6a3d5d7e83326741fc5abb1d5161960c"
      ],
      "author": {
        "name": "Yilia Lin",
        "email": "Yilialin@apache.org",
        "time": "Mon Aug 31 19:26:07 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 19:26:07 2026 +0800"
      },
      "message": "docs: improve gateway operations guidance (#13900)"
    },
    {
      "commit": "d53d855c6a3d5d7e83326741fc5abb1d5161960c",
      "tree": "f56f405c0270190812c5a06ffca623efb4c703b9",
      "parents": [
        "1caee4f69e3d55517cb4b7429fa0154fdd384935"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Aug 31 14:48:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 12:33:09 2026 +0545"
      },
      "message": "fix(ai-providers): encode Vertex AI model path segment (#13872)"
    },
    {
      "commit": "1caee4f69e3d55517cb4b7429fa0154fdd384935",
      "tree": "12b856e86e21cbbfa4d3dcaea9fdbd3d9b837857",
      "parents": [
        "bc54a21c05a4a7911add6ee3398ee9d232aee370"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Aug 31 14:47:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 12:32:49 2026 +0545"
      },
      "message": "docs(openid-connect): recommend setting redirect_uri to an absolute URL (#13879)"
    },
    {
      "commit": "bc54a21c05a4a7911add6ee3398ee9d232aee370",
      "tree": "665e694ae455b4971a7381cb17ee4d574a69acc3",
      "parents": [
        "127e6bb28cd3238c97bc4e99aa0733d402fb16bd"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Mon Aug 31 11:54:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 11:54:24 2026 +0800"
      },
      "message": "fix(control): always report healthcheck nodes as a JSON array (#13891)"
    },
    {
      "commit": "127e6bb28cd3238c97bc4e99aa0733d402fb16bd",
      "tree": "fecc9c866070bc0a8efcc28557db1d223ea91354",
      "parents": [
        "9037ee593474fe2685e142595e68e27f272e625c"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Mon Aug 31 11:41:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 11:41:45 2026 +0800"
      },
      "message": "test: give the redis counter poll five seconds instead of one (#13892)"
    },
    {
      "commit": "9037ee593474fe2685e142595e68e27f272e625c",
      "tree": "16aa4dc92c1fe999d1c33f49877e864354a31e8a",
      "parents": [
        "f94b3c76567574ffd11981cad2a8b025a0af3f4f"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Mon Aug 31 11:40:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 11:40:33 2026 +0800"
      },
      "message": "chore: bump APISIX-Runtime to 1.3.18 (#13890)"
    },
    {
      "commit": "f94b3c76567574ffd11981cad2a8b025a0af3f4f",
      "tree": "af1f40608358b9048b883724205b01f80d0b99bd",
      "parents": [
        "a64f2baa06b1c7d55e53051f3430f39bf9f4024c"
      ],
      "author": {
        "name": "Yilia Lin",
        "email": "Yilialin@apache.org",
        "time": "Mon Aug 31 10:13:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 10:13:19 2026 +0800"
      },
      "message": "docs: clarify JWE and RAG plugin guidance (#13873)"
    },
    {
      "commit": "a64f2baa06b1c7d55e53051f3430f39bf9f4024c",
      "tree": "5df2f7a1cfbb6b79713a48434c16ac1b7a1b470d",
      "parents": [
        "97e3800d4af5a6d9a1a5b475388ede1e72027754"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Fri Aug 28 08:50:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 08:50:46 2026 +0800"
      },
      "message": "fix(standalone): stop aborting stream connections before the first config arrives (#13855)"
    },
    {
      "commit": "97e3800d4af5a6d9a1a5b475388ede1e72027754",
      "tree": "4c1a38cc3c2d207ffbca4a820dd05a5c069bdbd7",
      "parents": [
        "6dbdb93541da823ff022fd0ddc091592c44bab5e"
      ],
      "author": {
        "name": "Blaise Wang",
        "email": "xudong.wang@chaitin.com",
        "time": "Thu Aug 27 18:26:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 18:26:55 2026 +0800"
      },
      "message": "feat: chaitin waf response logging (#13763)"
    },
    {
      "commit": "6dbdb93541da823ff022fd0ddc091592c44bab5e",
      "tree": "39d41919949d9bd7740a0f041826ba0610905a9e",
      "parents": [
        "89c782ee2e7b04e3f0ed3b6818ebc10281e561e4"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Thu Aug 27 17:18:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 17:18:58 2026 +0800"
      },
      "message": "fix(jwe-decrypt): reject malformed tokens instead of returning 500 (#13844)"
    },
    {
      "commit": "89c782ee2e7b04e3f0ed3b6818ebc10281e561e4",
      "tree": "835d82c76b8755d2b8e20996c206e3a77b238ce0",
      "parents": [
        "a036f1858b4b84d7f23d408dab33e9618c4c32ec"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Thu Aug 27 16:22:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 16:22:59 2026 +0800"
      },
      "message": "fix(etcd): do not block writes when the deployment role cannot be read (#13885)"
    },
    {
      "commit": "a036f1858b4b84d7f23d408dab33e9618c4c32ec",
      "tree": "7ffcf5f26f593c3863d6feafd4ea7a9276715a01",
      "parents": [
        "b9cfc05ebd7b0cf3e59fb6dc5c5f7bc32c929e56"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Thu Aug 27 17:19:38 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 16:19:38 2026 +0800"
      },
      "message": "fix(basic-auth): reject an empty consumer password (#13884)"
    },
    {
      "commit": "b9cfc05ebd7b0cf3e59fb6dc5c5f7bc32c929e56",
      "tree": "d6318f879f49a25e9de691ddbcb38d7995469923",
      "parents": [
        "76ff252b13e618b261bb98223f88737cfa7a4136"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Thu Aug 27 14:21:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 14:21:25 2026 +0800"
      },
      "message": "feat(upstream): verify the upstream certificate against configurable CAs (#13863)"
    },
    {
      "commit": "76ff252b13e618b261bb98223f88737cfa7a4136",
      "tree": "34f66f76567b8a96937fed058a450bf01a1ff9c9",
      "parents": [
        "cb7e781b437c1233570f512b23ae717201d2b49a"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Wed Aug 26 17:38:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 17:38:38 2026 +0800"
      },
      "message": "test(ai-proxy): cover the AWS moderation path in the truncated-stream suite (#13880)"
    },
    {
      "commit": "cb7e781b437c1233570f512b23ae717201d2b49a",
      "tree": "b2f7817755ea0007c5c128daf88bdcc9adb5f2db",
      "parents": [
        "d55f6d310d3b6451d08d0074505e9d2a08e0cc1e"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Wed Aug 26 15:25:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 15:25:09 2026 +0800"
      },
      "message": "chore: upgrade lua-resty-dns-client to 7.1.2 (#13875)"
    },
    {
      "commit": "d55f6d310d3b6451d08d0074505e9d2a08e0cc1e",
      "tree": "b6f1b2101c9fc0bee980cc55c2e616660a437076",
      "parents": [
        "77086b0db0dc91a120d0aa21834e6e41e4823d93"
      ],
      "author": {
        "name": "Arjen10",
        "email": "thistime833@gmail.com",
        "time": "Wed Aug 26 14:46:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 14:46:12 2026 +0800"
      },
      "message": "fix(ua-restriction): return false when UA matches the deny_list (#13869)"
    },
    {
      "commit": "77086b0db0dc91a120d0aa21834e6e41e4823d93",
      "tree": "022c2fdf995b68766e040476620db00a01d0663f",
      "parents": [
        "5abb66e39db992f92cfa8fa32c7c495211f36f42"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Wed Aug 26 14:35:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 26 14:35:54 2026 +0800"
      },
      "message": "fix(ai-proxy): do not turn a streaming read error after partial output into a 5xx (#13876)"
    },
    {
      "commit": "5abb66e39db992f92cfa8fa32c7c495211f36f42",
      "tree": "92ab7cbc34c5aae3a6f4be8a489fa5c6168a06d3",
      "parents": [
        "e056eac6885232d1312a28c5f632d193932c782f"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Mon Aug 24 16:34:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 16:34:19 2026 +0800"
      },
      "message": "fix(ai-proxy): return 502 when a streaming upstream produces no output (#13870)"
    },
    {
      "commit": "e056eac6885232d1312a28c5f632d193932c782f",
      "tree": "713b7a1fb0ef581c3918f649a5fe95a6773131ac",
      "parents": [
        "579e18eecc72e64e8d7be94c1a93136cd0390fe4"
      ],
      "author": {
        "name": "Yilia Lin",
        "email": "Yilialin@apache.org",
        "time": "Mon Aug 24 15:17:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 15:17:39 2026 +0800"
      },
      "message": "docs: align plugin references with current behavior (#13864)"
    },
    {
      "commit": "579e18eecc72e64e8d7be94c1a93136cd0390fe4",
      "tree": "0d6c4ebda351496be28a9bad567a1f26d3ff8b21",
      "parents": [
        "f519a0f04ccfd4c13b5d06caf34bcde8c8593980"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Mon Aug 24 11:34:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 11:34:04 2026 +0800"
      },
      "message": "fix(redirect): compare X-Forwarded-Proto case-insensitively (#13865)"
    },
    {
      "commit": "f519a0f04ccfd4c13b5d06caf34bcde8c8593980",
      "tree": "9fc099d5cb55912d08801910b4155602dfd37cc6",
      "parents": [
        "fa692977345c39d956d3abcfe1c0eadd81c3cc0d"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Thu Aug 20 18:17:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 18:17:33 2026 +0800"
      },
      "message": "docs(admin-api): correct the retry_timeout type to Number (#13860)"
    },
    {
      "commit": "fa692977345c39d956d3abcfe1c0eadd81c3cc0d",
      "tree": "a8d51fcc620e602540c4201ddb0f9bf0d6bc9225",
      "parents": [
        "d7553551af2287931b69c920fbf0aaadd189aa34"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Thu Aug 20 18:11:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 15:56:39 2026 +0545"
      },
      "message": "chore: release 3.18.0 (#13842)\n\nSigned-off-by: Abhishek Choudhary \u003cshreemaan.abhishek@gmail.com\u003e"
    },
    {
      "commit": "d7553551af2287931b69c920fbf0aaadd189aa34",
      "tree": "73047f18cc7df1bab8d0b6de6e6d5291d7904ae2",
      "parents": [
        "6e51dcfb71781a1cd078e6e95c31711beaaaaf01"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Thu Aug 20 16:55:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 16:55:21 2026 +0800"
      },
      "message": "feat(graphql-limit-count): rate limit by GraphQL query cost (#13840)"
    },
    {
      "commit": "6e51dcfb71781a1cd078e6e95c31711beaaaaf01",
      "tree": "d7ec5bb06e571c2737d444b004da5bd28f33662a",
      "parents": [
        "749a9bc155eda7019da11514189d49ad264b2d21"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Thu Aug 20 16:03:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 16:03:03 2026 +0800"
      },
      "message": "test(cli): wait for the pid file before reading it (#13854)"
    },
    {
      "commit": "749a9bc155eda7019da11514189d49ad264b2d21",
      "tree": "bc18cbc6c26504074631ba6e71f3c336060fe50c",
      "parents": [
        "1719001b42b83ffd83ea0d404147c8c85e77bfa1"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Thu Aug 20 15:10:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 15:10:11 2026 +0800"
      },
      "message": "test(basic-auth): store the vault secret before the consumer references it (#13853)"
    },
    {
      "commit": "1719001b42b83ffd83ea0d404147c8c85e77bfa1",
      "tree": "dfbf6996826beb0d238386dc91dc4abbfc4160b5",
      "parents": [
        "aa4472cab41b98636dde4aa4bb75418bcc1470d4"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Thu Aug 20 15:00:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 12:45:09 2026 +0545"
      },
      "message": "fix(data-mask): keep request header masking effective in the log phase (#13839)"
    },
    {
      "commit": "aa4472cab41b98636dde4aa4bb75418bcc1470d4",
      "tree": "d72e6abe96d14902555076c14e32570b3c0008d1",
      "parents": [
        "d0692133ecf56bf079b6a6f63c1381aee07fcf58"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Thu Aug 20 11:13:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 11:13:16 2026 +0800"
      },
      "message": "feat(ai-proxy-multi): let configured HTTP statuses trigger a fallback (#13852)"
    },
    {
      "commit": "d0692133ecf56bf079b6a6f63c1381aee07fcf58",
      "tree": "b6178483d44e5a3228674b6e9240848a8ff154b2",
      "parents": [
        "5e3ad1f10782e4790124d73af16092c70e9de7e2"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Thu Aug 20 11:12:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 11:12:32 2026 +0800"
      },
      "message": "fix(ai-proxy-multi): reject instances that share a name (#13851)"
    },
    {
      "commit": "5e3ad1f10782e4790124d73af16092c70e9de7e2",
      "tree": "7833ab17039e43b510b34135892f4602b10ae0d4",
      "parents": [
        "eee32148933ae7ac0a250b1c182cfbee56cfeedd"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Wed Aug 19 08:52:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 08:52:48 2026 +0800"
      },
      "message": "test(ai-rate-limiting): wait for token usage to reach redis between requests (#13841)"
    },
    {
      "commit": "eee32148933ae7ac0a250b1c182cfbee56cfeedd",
      "tree": "dafe7f035e8e4935e3686887c0a7a1d2eaeb0ece",
      "parents": [
        "280afdd710002216231184e84e554a9c1aa1292b"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Tue Aug 18 14:35:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 14:35:10 2026 +0800"
      },
      "message": "fix(openid-connect): enforce audience, issuer and required scopes (#13829)"
    },
    {
      "commit": "280afdd710002216231184e84e554a9c1aa1292b",
      "tree": "8a3ad496e9fefa18db92a8c1830082e606c18f7d",
      "parents": [
        "7ea42d45dcb0c3a7f3e263338d0ef816d0873705"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Tue Aug 18 14:26:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 14:26:36 2026 +0800"
      },
      "message": "ci: retry the MCP server download and fail on a bad HTTP status (#13838)"
    },
    {
      "commit": "7ea42d45dcb0c3a7f3e263338d0ef816d0873705",
      "tree": "bbe22c7356c23134389e732aaade9f14b5ada5b5",
      "parents": [
        "a4bacbdaaec19c15f95d770acdf8b360e46e3484"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Tue Aug 18 13:56:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 11:41:15 2026 +0545"
      },
      "message": "feat(ai-proxy): send LLM requests through ngx_http_ffi_client (#13778)"
    },
    {
      "commit": "a4bacbdaaec19c15f95d770acdf8b360e46e3484",
      "tree": "d5193c6636a392568f077c7002a8415818397165",
      "parents": [
        "59ab7ef8bfebc3ccb2a2acd97874498724a563c8"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Tue Aug 18 11:44:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 11:44:54 2026 +0800"
      },
      "message": "feat(ldap-auth): add hide_credentials (#13832)"
    },
    {
      "commit": "59ab7ef8bfebc3ccb2a2acd97874498724a563c8",
      "tree": "7e9d68ed860fa287c86d66641d603f5f03365499",
      "parents": [
        "942a9d71b23448bdef9aff03d7081e29b7f618d5"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Tue Aug 18 11:44:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 11:44:44 2026 +0800"
      },
      "message": "fix(admin): encrypt the inline upstream client key of a stream route (#13833)"
    },
    {
      "commit": "942a9d71b23448bdef9aff03d7081e29b7f618d5",
      "tree": "3a80f3b7d653e47dc29be7679b2385fbc344cafc",
      "parents": [
        "03922900726e086fa1002ecf76cc4edfd0ee2e7e"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Tue Aug 18 11:44:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 11:44:33 2026 +0800"
      },
      "message": "fix(proxy-cache): keep Vary variant keys out of reach of a crafted request (#13831)"
    },
    {
      "commit": "03922900726e086fa1002ecf76cc4edfd0ee2e7e",
      "tree": "841ff7e1d5a0808c3fb6a75b2cd85436e2ee9492",
      "parents": [
        "f0270cd22ac25080b0a006cfd8bbc6ea1c5f420b"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Tue Aug 18 09:12:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 09:12:51 2026 +0800"
      },
      "message": "fix(graphql-limit-count): measure each fragment once when computing query depth (#13809)"
    },
    {
      "commit": "f0270cd22ac25080b0a006cfd8bbc6ea1c5f420b",
      "tree": "c3ff7ef0284960b4848c3b904d91e933420a0b47",
      "parents": [
        "7bae5539816f08b30f3c534a53a43ce527771a2f"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Aug 17 17:43:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 15:28:37 2026 +0545"
      },
      "message": "fix: reframe request body forwarded upstream in serverless plugins (#13798)"
    },
    {
      "commit": "7bae5539816f08b30f3c534a53a43ce527771a2f",
      "tree": "ffecaa0fefa95360ace5feca2fa1c64f114f92b5",
      "parents": [
        "abdac4b32c6b531af97afe95d79f92adc4b078b1"
      ],
      "author": {
        "name": "Shreemaan Abhishek",
        "email": "shreemaan.abhishek@gmail.com",
        "time": "Mon Aug 17 17:43:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 15:28:26 2026 +0545"
      },
      "message": "fix(ldap-auth): key the consumer lookup on the escaped bind DN (#13805)"
    },
    {
      "commit": "abdac4b32c6b531af97afe95d79f92adc4b078b1",
      "tree": "5e9ea50be470afc49d6ceba494eabedd5ff1720d",
      "parents": [
        "54bbdc46ab2c5d2dd7754ced4c5c31e76ed9a02c"
      ],
      "author": {
        "name": "AlinsRan",
        "email": "alinsran@apache.org",
        "time": "Mon Aug 17 16:11:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 16:11:52 2026 +0800"
      },
      "message": "feat(prometheus): stream active connections, termination status and bandwidth (#13796)"
    },
    {
      "commit": "54bbdc46ab2c5d2dd7754ced4c5c31e76ed9a02c",
      "tree": "9f7d499d4790480235a69c44c99e5c1e2e288ed7",
      "parents": [
        "62feab14a2d2fc85eabdbac55214fbfedfb2e36f"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Mon Aug 17 15:03:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 15:03:41 2026 +0800"
      },
      "message": "fix(batch-processor): bound the pending entries backlog by default (#13826)"
    },
    {
      "commit": "62feab14a2d2fc85eabdbac55214fbfedfb2e36f",
      "tree": "0b166793bf6da5edb63dc2cea0b263c1d606312d",
      "parents": [
        "211f8f6adc4fac1ecd9831e7e4ca83010450b60c"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Mon Aug 17 14:27:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 14:27:33 2026 +0800"
      },
      "message": "test(healthcheck): stop counting probes that land after the threshold (#13834)"
    },
    {
      "commit": "211f8f6adc4fac1ecd9831e7e4ca83010450b60c",
      "tree": "455585e5ae886b6e9bce2d78f392cec977f91921",
      "parents": [
        "5dd7b9faaf8cf8ea486337e9deabb2e1a6df32c4"
      ],
      "author": {
        "name": "Nic",
        "email": "qianyong@api7.ai",
        "time": "Mon Aug 17 09:29:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 09:29:01 2026 +0800"
      },
      "message": "build: depend on a rapidjson rock that is not tied to the build host CPU (#13824)"
    },
    {
      "commit": "5dd7b9faaf8cf8ea486337e9deabb2e1a6df32c4",
      "tree": "22e6be7e411e91404a203ea9fc3f6e43afed8ffc",
      "parents": [
        "f17bcb2b351125eb470728702e9a2009d27e29cd"
      ],
      "author": {
        "name": "Mohammad Izzraff Janius",
        "email": "157467092+janiussyafiq@users.noreply.github.com",
        "time": "Fri Aug 14 18:59:26 2026 +0900"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 17:59:26 2026 +0800"
      },
      "message": "fix(openid-connect): handle temporarily_unavailable error redirects from the ID provider (#13825)"
    },
    {
      "commit": "f17bcb2b351125eb470728702e9a2009d27e29cd",
      "tree": "0748e2e8a3548dfb4db0a4d17c5dc4e55c8033b0",
      "parents": [
        "48fd32b3b98b4317f8981a5c57a97011fcecb4e3"
      ],
      "author": {
        "name": "Arjen10",
        "email": "47875127+Arjen10@users.noreply.github.com",
        "time": "Fri Aug 14 17:52:18 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 14 17:52:18 2026 +0800"
      },
      "message": "fix(hmac-auth): pass ctx when hiding the Authorization header (#13820)"
    }
  ],
  "next": "48fd32b3b98b4317f8981a5c57a97011fcecb4e3"
}
