)]}'
{
  "log": [
    {
      "commit": "bcaf803f9226d1dea69b49be344b75f8a081a0f6",
      "tree": "9aa4a36aae9bfd8f1ddc09e3c5be2b91677fde36",
      "parents": [
        "2f7775b936d487817e805120026fec28e1c9c1a7"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Fri Oct 30 00:10:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 30 00:10:03 2026 +0800"
      },
      "message": "Reserve extra bthread workers for blocking event loops (#3683)\n\n* Reserve extra bthread workers for blocking event loops\n\n* Abort dispatcher shutdown test on timeout to prevent dangling references"
    },
    {
      "commit": "2f7775b936d487817e805120026fec28e1c9c1a7",
      "tree": "71a50d01afb31bb070ebbea59447d9ce1427d6af",
      "parents": [
        "07bcdad23a358a1370d9e6d3b28033e110c30bbe"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Fri Oct 30 00:09:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 30 00:09:46 2026 +0800"
      },
      "message": "Support RSS trimming for idle bthread stacks (#3668)\n\n* Support RSS trimming for idle bthread stacks\n\n* Disable by default"
    },
    {
      "commit": "07bcdad23a358a1370d9e6d3b28033e110c30bbe",
      "tree": "662118d22d062539fdaafb923fbfb1f9731533cc",
      "parents": [
        "127362867565ec229a7f44d5d0820342725f884f"
      ],
      "author": {
        "name": "Sami Jawhar",
        "email": "sami@thecybermonk.com",
        "time": "Mon Oct 26 23:00:19 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 14:00:19 2026 +0800"
      },
      "message": "Fix AMF0 value readers that leave part of a value unread (#3674)\n\nAMF0 defines the type markers 0x00 to 0x11. A larger marker falls out\nof the switches in ReadAMFObjectField and ReadAMFArrayItem, and the\nreaders return true without reading a value. The bytes after the\nmarker are parsed next, and the document is accepted if they happen\nto parse. #3597 fixed the same problem for a stray object-end marker.\nReject the marker, as the unsupported-marker cases in the same\nswitches do. Switch on the raw byte, so that the new default case\ndoes not depend on converting an undefined marker to AMFMarker. The\n\"marker\u003d\" logs in the object readers now print the byte as a number,\nnot as a character.\n\nTwo more cases in these switches leave bytes unread. The class name of a\ntyped object can be unreadable, for example when it is longer than a\nlowered amf_max_string_size. The readers then only log, and the class\nname is parsed as the object\u0027s fields. Return false, as the string cases\ndo. In the protobuf reader, an object value for a field that is not a\nmessage is not read. Its fields are parsed as fields of the outer\nobject, and its end marker ends the outer object. Skip it, as the reader\ndoes for an unknown field.\n\nCo-authored-by: Claude Opus 5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "127362867565ec229a7f44d5d0820342725f884f",
      "tree": "a836155feafb9a0bbc77bb42c75bce4a48074a01",
      "parents": [
        "4cba331bd602de7816d1e63b22708b7b6f0ae906"
      ],
      "author": {
        "name": "nkysg",
        "email": "nkysggsy@gmail.com",
        "time": "Tue Oct 27 13:50:47 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 13:50:47 2026 +0800"
      },
      "message": "Fix EndPoint self-assignment (#3670)"
    },
    {
      "commit": "4cba331bd602de7816d1e63b22708b7b6f0ae906",
      "tree": "4bf9d164b1b1f6080b498c4b3fe5eb1ce9d5022d",
      "parents": [
        "25a31b1272434eb2a08e8b50f6e20bdfd55cb9a7"
      ],
      "author": {
        "name": "nkysg",
        "email": "nkysggsy@gmail.com",
        "time": "Mon Oct 26 11:45:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 11:45:11 2026 +0800"
      },
      "message": "fix: preserve lvalues in execution queue (#3654)"
    },
    {
      "commit": "25a31b1272434eb2a08e8b50f6e20bdfd55cb9a7",
      "tree": "f153d23a7bb49058153d35e8592758bcb92444aa",
      "parents": [
        "2857208cc032d6578743b48c670e842b810ebfff"
      ],
      "author": {
        "name": "li-lizhe",
        "email": "82501526+li-lizhe@users.noreply.github.com",
        "time": "Mon Oct 26 11:08:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 11:08:40 2026 +0800"
      },
      "message": "docs: point the builtin-service examples at localhost instead of the dead brpc.baidu.com (#3667)\n\nEvery sample in docs/ that shows a builtin-service URL (vars, status,\nflags, connections, rpcz, debugging pages...) points at\nhttp://brpc.baidu.com:8765. That host does not exist in public DNS\n(NXDOMAIN, issue #2804), so each of those links is dead for anyone\noutside Baidu and the shell snippets cannot be pasted and run.\n\nReplace the host with localhost:8765 -- the port the echo example serves\non (-port) -- and reword the two sentences in builtin_service.md that\ndescribed the sample as a long-running server on the maintainers\u0027 dev\nmachine, so the page tells readers to start the example locally instead.\n\nOnly the host changes: paths, ports and surrounding text stay as they are.\n\nRef #2804\n\nSigned-off-by: li-lizhe \u003c147392333@qq.com\u003e"
    },
    {
      "commit": "2857208cc032d6578743b48c670e842b810ebfff",
      "tree": "ee9a2890c406c63bf6e4d58a50a801690033efb5",
      "parents": [
        "ad5b904f23206abe7335d514f941801076733c45"
      ],
      "author": {
        "name": "nkysg",
        "email": "nkysggsy@gmail.com",
        "time": "Mon Oct 26 10:41:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 10:41:08 2026 +0800"
      },
      "message": "Fix synchronization of object pool free chunks (#3615)\n\n* Fix synchronization of object pool free chunks\n\n* Add free chunk count transition tests\n\n* rm unnecessary comments\n\n* update unit tests"
    },
    {
      "commit": "ad5b904f23206abe7335d514f941801076733c45",
      "tree": "26eed20ea2cdef8bf5d3414c23b7c817b447e336",
      "parents": [
        "cefc0913ed06ab58676dceb7c248bb155f7b7002"
      ],
      "author": {
        "name": "nkysg",
        "email": "nkysggsy@gmail.com",
        "time": "Mon Oct 26 10:38:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 10:38:19 2026 +0800"
      },
      "message": "Fix RemoteTaskQueue empty check race (#3641)"
    },
    {
      "commit": "cefc0913ed06ab58676dceb7c248bb155f7b7002",
      "tree": "f94694773d91dffb4385ec9a9230d4cf5dfce29d",
      "parents": [
        "4693b0854f6c926f33275ef0a4e0b8b4ddc837d9"
      ],
      "author": {
        "name": "nkysg",
        "email": "nkysggsy@gmail.com",
        "time": "Sun Oct 25 20:30:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 20:30:04 2026 +0800"
      },
      "message": "Fix stale Set-Cookie pointer after HttpHeader mutations (#3606)\n\n* Fix stale Set-Cookie pointer after HttpHeader mutations\n\n* Strengthen HttpHeader rehash regression test\n\n* Fix Set-Cookie header cache invalidation\n\n* Preserve AddHeader behavior for non-cookie headers\n\n* Avoid repeated Set-Cookie header synchronization\n\n* Add Set-Cookie collision regression test\n\n* Simplify Set-Cookie header storage"
    },
    {
      "commit": "4693b0854f6c926f33275ef0a4e0b8b4ddc837d9",
      "tree": "e6ee900a87d3851feadfc1c8eba87b0b3a956378",
      "parents": [
        "217f85edd471b7ceff9fd878d87f1cca8727bc44"
      ],
      "author": {
        "name": "Arthur Chan",
        "email": "arthur.chan@adalogics.com",
        "time": "Sun Oct 25 18:03:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 18:03:17 2026 +0800"
      },
      "message": "OSS-Fuzz: Add new fuzzer and corpora targets rtmp (#3516)\n\n* OSS-Fuzz: Add new fuzzer and corpora targets rtmp\n\nSigned-off-by: Arthur Chan \u003carthur.chan@adalogics.com\u003e\n\n* Provide dynamic seed generation python script\n\nSigned-off-by: Arthur Chan \u003carthur.chan@adalogics.com\u003e\n\n---------\n\nSigned-off-by: Arthur Chan \u003carthur.chan@adalogics.com\u003e"
    },
    {
      "commit": "217f85edd471b7ceff9fd878d87f1cca8727bc44",
      "tree": "1bb5a7fce256082a18fd328cd430d7e7b46aa63d",
      "parents": [
        "e98d2e7458f957d8d970826f7ed87d0b301d39fa"
      ],
      "author": {
        "name": "nkysg",
        "email": "nkysggsy@gmail.com",
        "time": "Sun Oct 25 17:50:15 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 17:50:15 2026 +0800"
      },
      "message": "Fix socket overcrowding state race (#3621)\n\n* Fix socket overcrowding state race\n\n* Clarify socket overcrowding limit behavior\n\n* Fix socket overcrowding flag consistency"
    },
    {
      "commit": "e98d2e7458f957d8d970826f7ed87d0b301d39fa",
      "tree": "e2835927426bd1305e1189158ad584f8f639f0d3",
      "parents": [
        "1f5ff5b141d1d501a81aad21deec7ce065153f88"
      ],
      "author": {
        "name": "sahvx655-wq",
        "email": "sahvx655@gmail.com",
        "time": "Sun Oct 25 15:18:35 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 17:48:35 2026 +0800"
      },
      "message": "do not serve rtmp on ServerOptions.internal_port (#3622)\n\n* do not serve rtmp on ServerOptions.internal_port\n\n* read the whole status prefix before comparing it in not_served_on_internal_port\n\n* require EOF after C0C1 in not_served_on_internal_port\n\n* write fully and retry EINTR in not_served_on_internal_port"
    },
    {
      "commit": "1f5ff5b141d1d501a81aad21deec7ce065153f88",
      "tree": "dfbcb302963fdbe326231ef160863421fef71e8d",
      "parents": [
        "f760a4f7893ace039b4b6a8989f572b7131b6095"
      ],
      "author": {
        "name": "nkysg",
        "email": "nkysggsy@gmail.com",
        "time": "Sun Oct 25 17:26:47 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 17:26:47 2026 +0800"
      },
      "message": "refactor: consolidate AsyncLogger log enqueue paths (#3653)"
    },
    {
      "commit": "f760a4f7893ace039b4b6a8989f572b7131b6095",
      "tree": "44e7ceb8dac950ec93e6f7f95a91d8e364f9564a",
      "parents": [
        "bc6ce6915556ff731d0fd3997c7903c26b6fbac8"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Sun Oct 25 17:20:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 17:20:30 2026 +0800"
      },
      "message": "Fix rpcz span persistence races during process shutdown (#3647)\n\n* Fix rpcz span persistence races during process shutdown\n\n* Fix comments and ut"
    },
    {
      "commit": "bc6ce6915556ff731d0fd3997c7903c26b6fbac8",
      "tree": "d79f6b4396372702a7350803b9719a47a5050f1b",
      "parents": [
        "36e729b718ea0d259b7d05e23cc76daef2debc48"
      ],
      "author": {
        "name": "nkysg",
        "email": "nkysggsy@gmail.com",
        "time": "Sun Oct 25 17:17:56 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 17:17:56 2026 +0800"
      },
      "message": "refactor: consolidate MPSCQueue enqueue paths (#3655)"
    },
    {
      "commit": "36e729b718ea0d259b7d05e23cc76daef2debc48",
      "tree": "9c7f1cb9f31f69131a09f656d272373e41f4a094",
      "parents": [
        "2903d9235a3c8e91fd1b1feb2d64f059a08c3188"
      ],
      "author": {
        "name": "nkysg",
        "email": "nkysggsy@gmail.com",
        "time": "Sat Oct 24 22:09:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 24 22:09:51 2026 +0800"
      },
      "message": "Validate thread key generation during TLS cleanup (#3648)"
    },
    {
      "commit": "2903d9235a3c8e91fd1b1feb2d64f059a08c3188",
      "tree": "5694117da2a6049e91d35d88d2959859fffa7dc1",
      "parents": [
        "f4ffd17faaf9f95c6bbb5b75bf87fc2a32509835"
      ],
      "author": {
        "name": "Qingyuan Wang",
        "email": "146524024+NUAAwqy@users.noreply.github.com",
        "time": "Sat Oct 24 21:43:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 24 21:43:51 2026 +0800"
      },
      "message": "Fix comment and test-string typos (#3652)\n\noverriden -\u003e overridden (2), occured -\u003e occurred, acess -\u003e access,\nSucess -\u003e Success (unasserted test payload). No behavior change.\n\nSigned-off-by: NUAAwqy \u003c146524024+NUAAwqy@users.noreply.github.com\u003e"
    },
    {
      "commit": "f4ffd17faaf9f95c6bbb5b75bf87fc2a32509835",
      "tree": "307f2b48597008d456573182f6e3c5618be0e115",
      "parents": [
        "e151699f90bc5c0c3ff1db24c6ea06364a0b6065"
      ],
      "author": {
        "name": "nkysg",
        "email": "nkysggsy@gmail.com",
        "time": "Sat Oct 24 14:10:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 24 14:10:09 2026 +0800"
      },
      "message": "perf: move serialized response IOBuf instead of sharing BlockRefs (#3649)\n\n* perf: move serialized response IOBuf instead of sharing BlockRefs\n\n* add comment"
    },
    {
      "commit": "e151699f90bc5c0c3ff1db24c6ea06364a0b6065",
      "tree": "a0eecd549fc40bd69ee182cfcb4c646c92c7fd94",
      "parents": [
        "962743de08bfaa5cfb98a9339eaea673dba601a5"
      ],
      "author": {
        "name": "darion-yaphet",
        "email": "darion.yaphets@gmail.com",
        "time": "Sat Oct 24 14:07:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 24 14:07:45 2026 +0800"
      },
      "message": "fix(brpc): avoid duplicate method metrics exposure (#3643)\n\nExpose each method status only through its owning entry. Full and short method names share the same status, so exposing both temporarily hides already published metrics.\n\nAdd a startup regression test and wait for the required percentile before scraping the Prometheus summary."
    },
    {
      "commit": "962743de08bfaa5cfb98a9339eaea673dba601a5",
      "tree": "7fb59c25bd22b8ef50e56a7c8c45907686ac68fb",
      "parents": [
        "6ff47acf554262f6fc2d0b2c6fe538b8208a6675"
      ],
      "author": {
        "name": "NeutralMilkHotel",
        "email": "wengshishuai@163.com",
        "time": "Fri Oct 23 17:45:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 17:45:12 2026 +0800"
      },
      "message": "Fix inconsistent ownership handling in SelectiveChannel::AddChannel on failure (#3595)\n\n* Fix inconsistent ownership handling in SelectiveChannel::AddChannel on failure (#1408)\n\n* Fix double-free of sub channel on SelectiveChannel fake socket creation failure\n\n* Ensure SocketUser is cleaned up when Socket creation fails at IOEvent init\n\n* Fix double-free of SubPartitionChannel on SelectiveChannel::AddChannel failure (#1408)\n\n* Update user attachment logic on IOEvent init failure\n\nAttach user before returning on IOEvent initialization failure to ensure proper cleanup.\n\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n* Fix SelectiveChannel::AddChannel ownership handling on failure\n\n* Fix sub channel leak when SelectiveChannel::AddChannel is called before Init\n\n* Use ScopeGuard to centralise early-failure cleanup in ChannelBalancer::AddChannel\n\n---------\n\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "6ff47acf554262f6fc2d0b2c6fe538b8208a6675",
      "tree": "533386cb9d86ff4ed7e5d49e169b2a84c422d448",
      "parents": [
        "81c15259750a9659865a1fae307aaf7614459630"
      ],
      "author": {
        "name": "darion-yaphet",
        "email": "darion.yaphets@gmail.com",
        "time": "Fri Oct 23 12:33:42 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 12:33:42 2026 +0800"
      },
      "message": "fix(bthread): Synchronize keytable pool pointer access (#3638)\n\n* fix(bthread): synchronize keytable pool access\n\nRead pool pointers and the destroyed state under the existing rwlock. Keep only a boolean availability hint between the read and write lock sections, then recheck the pool state under the write lock.\n\nAdd coverage for concurrent borrowing, returning, and pool destruction, including reclamation of tables returned after destruction.\n\n* test(bthread): ensure keytable return after pool destruction\n\n* test(bthread): isolate keytable pool test flag"
    },
    {
      "commit": "81c15259750a9659865a1fae307aaf7614459630",
      "tree": "a9e1f620ed4c8c2bcd166e21dfdbbca91734cbe2",
      "parents": [
        "e6fd4c5a803bfe4c803456081f064632cc883539"
      ],
      "author": {
        "name": "nkysg",
        "email": "nkysggsy@gmail.com",
        "time": "Fri Oct 23 10:37:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 10:37:01 2026 +0800"
      },
      "message": "Fix ResourcePool block item count race (#3640)\n\n* Fix ResourcePool block item count race\n\n* Optimize ResourcePool nitem publication"
    },
    {
      "commit": "e6fd4c5a803bfe4c803456081f064632cc883539",
      "tree": "7669e2d80f0f4acf9b306023fd8235cd8cae6bec",
      "parents": [
        "8d4aa518352d7dc51e5dbf9f37c12dd1482e3e2c"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Thu Oct 22 21:28:56 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 21:28:56 2026 +0800"
      },
      "message": "Fix JSON parsing offsets at EOF (#3635)\n\n* Fix JSON parsing offsets at EOF\n\n* Opt\n\n* Fix ut"
    },
    {
      "commit": "8d4aa518352d7dc51e5dbf9f37c12dd1482e3e2c",
      "tree": "a92a6ec9336ffbae593229756161a0e2dd6f3a38",
      "parents": [
        "d1217db88845b308767af082a0e661071eae0ed8"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Thu Oct 22 21:21:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 21:21:24 2026 +0800"
      },
      "message": "Fix macOS futex wake accounting with per-waiter notifications (#3637)\n\n* Fix macOS futex wake accounting with per-waiter notifications\n\n* Fix ut\n\n* Guard macOS futex waiter cleanup and fix timeout test diagnostic"
    },
    {
      "commit": "d1217db88845b308767af082a0e661071eae0ed8",
      "tree": "9009882423c95ca468f39545edcc024b8333416d",
      "parents": [
        "87d498dd62d8b3b3562407cdf38ac0c475d312b3"
      ],
      "author": {
        "name": "Xu Lei",
        "email": "98076253+AnDiXL@users.noreply.github.com",
        "time": "Thu Oct 22 21:18:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 21:18:32 2026 +0800"
      },
      "message": "Add optional FlatBuffers messages and code generation (#3558)\n\n* Add FlatBuffers message and service support\n\nAdd IOBuf-backed messages, allocator-aware builders, and stable service\ndescriptors. Preserve shared-buffer copy semantics and validate allocator,\nparsing, descriptor, and ownership contracts with the core unit suite.\n\nKeep FlatBuffers 25.2.10 support disabled by default across CMake, Make,\nand Bazel. Isolate generated test headers and select matching GoogleTest\nheaders and libraries. Network transport and Channel/Server integration\nremain in the follow-up PR.\n\n* Add FlatBuffers service generator and acceptance tests\n\nGenerate service and stub bindings with the upstream FlatBuffers parser.\nMatch flatc type escaping, preserve schema service identities, and reject\ncollisions with schema declarations, generated API names, and reserved\nC++ identifiers. Publish header/source pairs with locking and rollback.\n\nCover imported and nested schemas, compiler modes, relocation, concurrent\ngeneration, failure recovery, and real runtime dispatch. Pass compiler\nflags through acceptance checks and pin validation to flatc 25.2.10.\n\n* Verify FlatBuffers support in Linux and macOS CI\n\nRun the core unit suite, codegen acceptance, and runtime tests through a\nshared verification entry. Pin FlatBuffers and GoogleTest sources and\nreject empty or skipped core test runs.\n\nExercise GCC 11 and Clang 14 on Linux and Protobuf 21 and 29 on macOS.\nBuild checksum-pinned Gperftools in the Linux runner temporary directory\nwithout libunwind to avoid conflicts with hosted runner packages.\n\n* Document FlatBuffers support\n\nAdd Chinese and English guides for messages, builders, descriptors, and\nservice generation. Describe shared-buffer ownership, verification,\nallocation failures, supported dependency versions, and build options.\n\nDocument generator naming rules, failure recovery, acceptance tests, and\nthe shared CI verification entry. Keep network transport and\nChannel/Server integration explicitly outside this PR.\n\n* Document using other FlatBuffers versions\n\nDescribe how to move off the default 25.2.10: build the target version\ninto a private prefix, update the runtime, generator, and codegen test\nversion checks, and rerun verify.sh against that prefix. Use 23.5.26 as\nthe worked example and limit it to CMake builds.\n\nList FlatBuffers among the supported dependencies in the getting started\nguides, following the format used for protobuf and libunwind.\n\n---------\n\nCo-authored-by: xulei25 \u003cxulei25@baidu.com\u003e"
    },
    {
      "commit": "87d498dd62d8b3b3562407cdf38ac0c475d312b3",
      "tree": "f7699c17b0a8784bf37c9f2eea1f11e7b9746a61",
      "parents": [
        "64687f39314af60f024f2a637856bffeef17df97"
      ],
      "author": {
        "name": "nkysg",
        "email": "nkysggsy@gmail.com",
        "time": "Thu Oct 22 14:06:44 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 14:06:44 2026 +0800"
      },
      "message": "test: remove leaking ResourcePool allocation benchmark (#3639)"
    },
    {
      "commit": "64687f39314af60f024f2a637856bffeef17df97",
      "tree": "a0b6707ed8378114379b9c77a36fd3a2081295dc",
      "parents": [
        "b4e149f8190a7d32b03580b98e8a642706fc1eac"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Thu Oct 22 14:04:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 14:04:16 2026 +0800"
      },
      "message": "Fix flaky histogram window ut (#3611)\n\n* Fix flaky histogram window ut\n\n* Fix flaky histogram window test by polling cumulative snapshot\n\n* Make histogram window expiration test deterministic"
    },
    {
      "commit": "b4e149f8190a7d32b03580b98e8a642706fc1eac",
      "tree": "396af9d82a12b8ece4056401aaf9ce101e876b9d",
      "parents": [
        "9b0f9454209d05d863d9ae41980f4bc9c7654c72"
      ],
      "author": {
        "name": "CyberNative AI LLC",
        "email": "team@cybernative.ai",
        "time": "Mon Oct 19 23:06:22 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 14:06:22 2026 +0800"
      },
      "message": "Install protobuf@21 from a local tap in macOS CI before Homebrew removes it (#3628)\n\n* Install protobuf@21 from a local tap in macOS CI\n\nHomebrew disabled protobuf@21 on 2026-01-08 and removes disabled\nformulae a year after their disable date. The formula still installs\ntoday with a deprecation warning; once it is removed from homebrew-core,\n\"brew install protobuf@21\" fails with \"No available formula\" and the\ncompile-with-make-cmake-protobuf21 job fails.\n\nInstall it from a local tap that holds the homebrew-core formula at\ncommit cced3ef1d489 without its deprecate!/disable! lines. Homebrew\npours the same bottle into the same opt/protobuf@21 prefix, so the make\nand cmake steps are unchanged.\n\n* Keep the protobuf@21 formula in homebrew-formula/\n\nStore the pinned homebrew-core formula (commit cced3ef1d489, without\nits deprecate!/disable! lines) as homebrew-formula/protobuf@21.rb and\ncopy it into the local tap, so the macOS job no longer downloads it on\nevery run. The file keeps Homebrew\u0027s BSD 2-Clause notice; it is listed\nin LICENSE and excluded from the Apache header check, like the other\nthird-party files."
    },
    {
      "commit": "9b0f9454209d05d863d9ae41980f4bc9c7654c72",
      "tree": "0c206e81c374da264b248a18c1ffccccd20e015b",
      "parents": [
        "3c559073cfa391efead44a19ba575bb7851aa9fa"
      ],
      "author": {
        "name": "Xiaofeng Wang",
        "email": "wasphin@gmail.com",
        "time": "Tue Oct 20 13:29:53 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 13:29:53 2026 +0800"
      },
      "message": "Refactor CMake source and target ownership into module directories (#3618)\n\n* Move CMake source definitions into module directories\n\nKeep source selection and bundled artifacts unchanged while moving each\nmodule source list and RPC protocol generation out of the root project.\nRetain the existing test source inputs during this first migration step.\n\n* Define CMake production targets in their module directories\n\nLet each module own its production object library and move the mcpack\nprotoc generator into its module. Aggregate the module objects into the\nexisting brpc bundle without compiling production sources twice.\n\nMove butil configuration-header generation, feature-option handling and\ndependency discovery into the owning modules. Keep RPC-only headers out\nof lower-library compile settings and assemble legacy bundle dependencies\nafter module setup.\n\nApply CRC32C instruction flags only to the relevant sources, including\ndebug builds. Preserve the RISC-V vector base64 options and the existing\nAArch64 libcontext workaround.\n\nQuery module targets for the existing unit-test source sets instead of\npassing source lists through parent directory scopes. Preserve the test\ncompile definitions and bundled debug library linkage.\n\nInstall source and generated headers directly from their owning modules.\nKeep build-tree include paths separate from installed target interfaces\ninstead of copying headers into an output staging tree.\n\nUse Protobuf\u0027s imported targets to preserve static transitive dependencies\nand Debug/Release library selection, and handle config-mode import paths.\n\n* Use explicit installation prefixes for CMake examples\n\nStop searching for the removed output/include staging directory and honor\nthe caller-provided CMAKE_PREFIX_PATH in both example entry points.\nDocument the install-before-use workflow in English and Chinese.\n\nLink Protobuf through its imported target so non-system installations\nsupply the headers required by generated sources and public RPC headers.\n\n* Align the ubring example CMake minimum with the project\n\nRequire CMake 3.16 and use the same policy range as the root project and\nother examples. This makes the declared minimum consistent with use of\nthe protobuf::libprotobuf imported target introduced in CMake 3.9.\n\n* Configure the install prefix before generating pkg-config metadata\n\nSet CMAKE_INSTALL_PREFIX during configuration in both getting-started\nguides, then build and install without an install-time prefix override.\nThis keeps the generated brpc.pc paths aligned with the installed files.\n\n* Prefer generated IDL headers when building the mcpack generator\n\nInherit build settings through the selected brpc bundle instead of linking\nbutil_build_config first. This keeps the generated IDL header directory\nahead of the source tree and prevents stale Make-generated headers from\nshadowing the current CMake output.\n\n* Remove unused CMake module configuration leftovers\n\nDrop the unread platform-library property and unused URMA parent-scope\nexports. Remove redundant debug-bundle glog blocks, since module-owned\nbundle dependencies already propagate the library through DYNAMIC_LIB.\n\n* Document installed-prefix builds for UBRing examples\n\nSet the brpc installation prefix at configure time, install the bundle,\nand pass the prefix explicitly when building the performance example.\nUpdate both build sections in the English and Chinese UBRing guides.\n\n* Preserve ordered transitive dependencies for CMake bundles\n\nPropagate the complete link dependency closure from the static bundle and\nreuse it in tools rather than masking missing dependencies at each caller.\nOrder module consumers before providers in both CMake and pkg-config, and\nkeep system libraries after their users.\n\nRetain LevelDB Snappy dependencies independently of WITH_SNAPPY without\nexposing unused Snappy headers. Include selected optional runtime libraries\nin the generated private link metadata.\n\nAdd bundle-only consumers and dependency-metadata checks to the existing\nCMake CI jobs without increasing job concurrency.\n\n* Normalize legacy LevelDB CMake target dependencies\n\nUse LevelDB\u0027s exported target to carry its link dependencies while keeping\nheader and library discovery for installations without a CMake package.\n\nWork around private warning flags and unnecessary shared-library Snappy\nlinkage exported by LevelDB 1.23. Preserve static and unknown-type link\ndependencies, along with brpc\u0027s explicit WITH_SNAPPY option.\n\nGive debug sources the same LevelDB requirements and add a standalone\nconsumer to the existing CMake link checks without adding CI jobs."
    },
    {
      "commit": "3c559073cfa391efead44a19ba575bb7851aa9fa",
      "tree": "030c9d8e3f22fa401686f41749e0f0b854921dd3",
      "parents": [
        "8252e8ec54da4db3b836d348151d757ba7fab647"
      ],
      "author": {
        "name": "Dongsheng He",
        "email": "ehds@qq.com",
        "time": "Tue Oct 20 10:35:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 10:35:50 2026 +0800"
      },
      "message": "The MPSC queue should move the rvalue-reference argument into data_mem init (#3627)\n\n* fix enqueue move-only\n\n* Add test for move-only enqueue and dequeue\n\nAdded test for enqueueing and dequeuing move-only types in MPSCQueue.\n\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n---------\n\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "8252e8ec54da4db3b836d348151d757ba7fab647",
      "tree": "c84ec0817d50e8c3960e140458e6661f1c5a25fa",
      "parents": [
        "f0239d7448a2ebb39415bcadc17085c411d7be76"
      ],
      "author": {
        "name": "darion-yaphet",
        "email": "darion.yaphets@gmail.com",
        "time": "Mon Oct 19 14:54:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 14:54:28 2026 +0800"
      },
      "message": "Destroy keytable pool and tls key when Server::Start() fails early (#3590)\n\n* Destroy keytable pool and tls key when Server::Start() fails early\n\nStartInternal() allocates _keytable_pool (and the tls key when a\nthread_local_data_factory is set) unconditionally, but on failures\nbefore _status reaches RUNNING - e.g. tcp_listen() fails because the\nport is in use - RevertServerStatus runs Stop(0)+Join(), both of which\nreturn immediately when the server is not RUNNING. The pool and the key\nleaked on every failed attempt, and a retry overwrote _keytable_pool\nwith a fresh pool, permanently leaking the previous one. ~Server() had\nthe same problem for a failed-start server.\n\nAdd Server::DestroyPreStartAllocations() (no-op once RUNNING/STOPPING,\nwhere Join() handles cleanup) and call it from RevertServerStatus and\n~Server(). Unlike Join() the pool struct is deleted too, since no\nconnection can exist before RUNNING.\n\nVerified in ServerTest.sanity: after a port-conflict failure,\n_keytable_pool is nullptr and the tls key is invalid (on the old code\nboth leak and the test fails), including across a failed retry. Full\nbrpc_server_unittest suite shows no new failures.\n\n* Bthreads spawned from bthread_init_fn with the inherited attr\n(bthread_getattr(bthread_self(), ...)) carry keytable_pool \u003d\u003d\n_keytable_pool and may outlive a failed Server::Start(). They still\ncall return_keytable() on exit, so deleting the pool struct in\nDestroyPreStartAllocations() causes a heap-use-after-free (reported\nby ASan at key.cpp:394).\n\nDo the same as Join(): destroy the pool contents with\nbthread_keytable_pool_destroy() but don\u0027t delete the struct. A\ndestroyed pool makes late return_keytable() calls delete their\nKeyTable directly. The leftover struct is small, only leaked on\nfailed starts, and already annotated in StartInternal().\n\nAdd failed_start_keeps_keytable_pool_for_init_bthreads, which spawns\nsuch a child from bthread_init_fn and fails Start() with EADDRINUSE.\n\n* test(brpc): Synchronize failed-start regression test\n\nReplace the fixed sleep with a CountdownEvent so the child bthread continues\nonly after the failed Start() returns and the Server is destroyed.\nThis ensures that the regression test exercises access to the destroyed keytable pool.\n\nUse a nonfatal Start() assertion so the child is still signaled and joined if startup unexpectedly succeeds.\n\n* refactor(server): share thread-local cleanup\n\nCentralize keytable pool and TLS key cleanup for normal shutdown and failed-start recovery while preserving their destruction order and pool lifetime constraints."
    },
    {
      "commit": "f0239d7448a2ebb39415bcadc17085c411d7be76",
      "tree": "a51394fffd9152f438f2ec753d256fe5e612cc0d",
      "parents": [
        "d0f3f933cc051af3e760f169a7e95a515d9faf29"
      ],
      "author": {
        "name": "Qingyuan Wang",
        "email": "146524024+NUAAwqy@users.noreply.github.com",
        "time": "Mon Oct 19 10:29:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 10:29:34 2026 +0800"
      },
      "message": "Fix malformed Consul documentation link (#3624)"
    },
    {
      "commit": "d0f3f933cc051af3e760f169a7e95a515d9faf29",
      "tree": "ec380189af30c3cb77fe3a536c1285869bfbfc41",
      "parents": [
        "7ef1d00efd9a35f1ba3a6017f1cf4f856b21905d"
      ],
      "author": {
        "name": "nkysg",
        "email": "nkysggsy@gmail.com",
        "time": "Sun Oct 18 19:09:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 19:09:30 2026 +0800"
      },
      "message": "Optimize Redis command formatting buffer handling (#3609)\n\n* Optimize Redis command formatting buffer handling\n\n* Handle Redis command formatting append failures\n\n* remove unused function"
    },
    {
      "commit": "7ef1d00efd9a35f1ba3a6017f1cf4f856b21905d",
      "tree": "adadd5b94c4805818d444a95bd357c1a36def753",
      "parents": [
        "76ff79beee74e919174d36efa1a4da00bafadd8d"
      ],
      "author": {
        "name": "Felix-Gong",
        "email": "gongxiaofei24@iscas.ac.cn",
        "time": "Sun Oct 18 17:05:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 17:05:02 2026 +0800"
      },
      "message": "CRC32C RISC-V: pick clmul or vclmul by size when both are available (#3601)\n\nPR3332 sent every Zbc+Zvbc CPU to the vclmul path. After #3571\nrewrote it, vclmul beats clmul from ~256 B up (1.5x-7.5x) but costs\nmore below that, where vector setup dominates. A fixed order to\neither path is wrong for these CPUs.\n\nSelect by size in the dispatcher: clmul under 256 B, vclmul from\n256 B on. CPUs with only Zbc or only Zvbc keep their current path,\nand Extend() is untouched.\n\nk3 (X100, VLEN\u003d256, 20-round median):\n  256 B   clmul 1534  vclmul 2155\n  1 MiB   clmul 1555  vclmul 11702   (MB/s)\n\nSigned-off-by: Xiaofei Gong \u003cgongxiaofei24@iscas.ac.cn\u003e\nSigned-off-by: YuanSheng \u003cyuansheng@isrc.iscas.ac.cn\u003e"
    },
    {
      "commit": "76ff79beee74e919174d36efa1a4da00bafadd8d",
      "tree": "45c31c619fa4c8273e9183272096575470504942",
      "parents": [
        "d1c3f7cc1c3546c04f472d675c92190e93055521"
      ],
      "author": {
        "name": "UB",
        "email": "ubed@bugqore.com",
        "time": "Sun Oct 18 09:33:21 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 12:03:21 2026 +0800"
      },
      "message": "enforce ServerOptions.auth for redis, mongo and rtmp requests (#3598)"
    },
    {
      "commit": "d1c3f7cc1c3546c04f472d675c92190e93055521",
      "tree": "9d9cca229af4c27d34dfb4f7649f85129fbfb3bd",
      "parents": [
        "8d1523f2bc844617d4a380bab4b87781d3318dff"
      ],
      "author": {
        "name": "nkysg",
        "email": "nkysggsy@gmail.com",
        "time": "Sun Oct 18 10:47:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 10:47:27 2026 +0800"
      },
      "message": "Fix sparse FlatMap swap thumbnail reset (#3619)"
    },
    {
      "commit": "8d1523f2bc844617d4a380bab4b87781d3318dff",
      "tree": "624914326195ebe72078ed879213dacf2488d09e",
      "parents": [
        "7696e88ca5c2d1f1478f69b56f11b506f8e87e3f"
      ],
      "author": {
        "name": "UB",
        "email": "ubed@bugqore.com",
        "time": "Sun Oct 18 08:16:42 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 10:46:42 2026 +0800"
      },
      "message": "null-terminate peer shm_name in HelloMessage::Deserialize (#3605)"
    },
    {
      "commit": "7696e88ca5c2d1f1478f69b56f11b506f8e87e3f",
      "tree": "2845802ea398ae396a0f0c5829c1a065925d6ce1",
      "parents": [
        "74963326c2c581d36bdf55c799a5a5c513187c3f"
      ],
      "author": {
        "name": "nkysg",
        "email": "nkysggsy@gmail.com",
        "time": "Sun Oct 18 10:44:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 10:44:52 2026 +0800"
      },
      "message": "Destroy MPSC queue elements before releasing nodes (#3620)"
    },
    {
      "commit": "74963326c2c581d36bdf55c799a5a5c513187c3f",
      "tree": "e8e2d4192a61f095c9285516cd12e296547e64b2",
      "parents": [
        "5cef29d5dd55c0db93cec8ab8a62c4c3b524dce3"
      ],
      "author": {
        "name": "sahvx655-wq",
        "email": "sahvx655@gmail.com",
        "time": "Sun Oct 18 08:08:06 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 10:38:06 2026 +0800"
      },
      "message": "bound grpc-timeout value before converting to microseconds (#3591)\n\n* bound grpc-timeout value before converting to microseconds\n\n* clarify what the grpc-timeout bound rejects"
    },
    {
      "commit": "5cef29d5dd55c0db93cec8ab8a62c4c3b524dce3",
      "tree": "7673faf4ff7ebd062745888c0e4c943c58064c33",
      "parents": [
        "52de3a1f419949ef6416af3955dd592a17c1bb8b"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Sun Oct 18 10:32:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 10:32:01 2026 +0800"
      },
      "message": "Fix flaky endpoint tests and misleading core backtraces (#3599)"
    },
    {
      "commit": "52de3a1f419949ef6416af3955dd592a17c1bb8b",
      "tree": "951eb3c81627735747d6db8f4d625d81968d1faf",
      "parents": [
        "c4f0a92478b24e4d2104e462e4cba45167250f34"
      ],
      "author": {
        "name": "altman08",
        "email": "936396749@qq.com",
        "time": "Sun Oct 18 10:30:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 10:30:29 2026 +0800"
      },
      "message": "Fix SelectiveChannel handling of late subcall callbacks (#3600)\n\nDiscard subcall results after the main RPC has finished while still returning their resources. Release the main call-id lock for non-final callbacks and let the final callback complete cleanup.\n\nAdd deterministic coverage for late timeout/cancel callbacks, callback ordering, controller destruction, and error propagation and retries before completion.\n\nTests: brpc_channel_unittest (87 passed)."
    },
    {
      "commit": "c4f0a92478b24e4d2104e462e4cba45167250f34",
      "tree": "bde86507cd6a0d07b906b0900432edde245f226e",
      "parents": [
        "3d1da246c1734b42d9a4e6fe88f15555c1ef9894"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Sun Oct 18 10:10:57 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 10:10:57 2026 +0800"
      },
      "message": "Add monitor of timer thread task (#3603)"
    },
    {
      "commit": "3d1da246c1734b42d9a4e6fe88f15555c1ef9894",
      "tree": "8541dc0c3fbe51bde06d9fd0feeafce1816b3877",
      "parents": [
        "21339fc4b16f0520ae79cd855339f3f5daa60662"
      ],
      "author": {
        "name": "Dongsheng He",
        "email": "grephale@gmail.com",
        "time": "Sat Oct 17 22:53:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 22:53:17 2026 +0800"
      },
      "message": "Fix use-after-destruction when erasing MultiFlatMap bucket head (#3617)\n\n* Fix MultiFlatMap erase on bucket head\n\n* destroy element before set_invalid"
    },
    {
      "commit": "21339fc4b16f0520ae79cd855339f3f5daa60662",
      "tree": "db90a7e3ee5da7c8042c1af57896237e46ad4283",
      "parents": [
        "36c2d12e0f56b2a306f66e189d6f399b875d9c95"
      ],
      "author": {
        "name": "nkysg",
        "email": "nkysggsy@gmail.com",
        "time": "Sat Oct 17 18:06:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 18:06:51 2026 +0800"
      },
      "message": "Fix macOS build compatibility issue (#3616)\n\n* Fix macOS build compatibility issues\n\n* revert DEFINE_SMALL_ARRAY"
    },
    {
      "commit": "36c2d12e0f56b2a306f66e189d6f399b875d9c95",
      "tree": "ce2fc07a3051202358498fb485b3b56478e9bebd",
      "parents": [
        "154783f948ec2b761227bb4a3a9421621b634406"
      ],
      "author": {
        "name": "songgaoye",
        "email": "nkysggsy@gmail.com",
        "time": "Fri Oct 16 14:26:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 14:26:48 2026 +0800"
      },
      "message": "Validate remote file service names before parsing (#3608)\n\n* Validate remote file service names before parsing\n\n* Use range-based loop in naming service test"
    },
    {
      "commit": "154783f948ec2b761227bb4a3a9421621b634406",
      "tree": "5fdf46473c74b41bef762fefd25dc445e69aeea7",
      "parents": [
        "dfce9652299b723590d143039c3294cafce2ed0d"
      ],
      "author": {
        "name": "songgaoye",
        "email": "nkysggsy@gmail.com",
        "time": "Thu Oct 15 15:01:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 15:01:36 2026 +0800"
      },
      "message": "Fix PercentileSamples initialization warning (#3613)"
    },
    {
      "commit": "dfce9652299b723590d143039c3294cafce2ed0d",
      "tree": "0fa5b21591b4a49fa4548fd1bb6e59bea2aab576",
      "parents": [
        "82ff823902379eb68b0875ab179995ea6a7627c8"
      ],
      "author": {
        "name": "songgaoye",
        "email": "nkysggsy@gmail.com",
        "time": "Thu Oct 15 11:56:29 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 11:56:29 2026 +0800"
      },
      "message": "Fix flaky Prometheus metrics startup test (#3610)"
    },
    {
      "commit": "82ff823902379eb68b0875ab179995ea6a7627c8",
      "tree": "64986b091ebeee0d7424f8d36faf81752f5d0da3",
      "parents": [
        "7a2c1d5e04b99dca884f87a534e32a86db491ed5"
      ],
      "author": {
        "name": "Chuang Zhang",
        "email": "zchuang185@gmail.com",
        "time": "Tue Oct 13 19:43:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 19:43:17 2026 +0800"
      },
      "message": "Add IPC_V2 data path for UBRing IPC (#3573)\n\n* Add IPC_V2 data path for UBRing IPC\n\n* Move IPC_V2 ring implementation out of header\n\n---------\n\nCo-authored-by: BGQ99 \u003c1132767344@qq.com\u003e"
    },
    {
      "commit": "7a2c1d5e04b99dca884f87a534e32a86db491ed5",
      "tree": "04c3d892bf8f007a096138b0cbe77185a5d3a482",
      "parents": [
        "9ea2eae8f1abcf059735003d1a4f5c065f8bea01"
      ],
      "author": {
        "name": "UB",
        "email": "ubed@bugqore.com",
        "time": "Mon Oct 12 10:13:22 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 12:43:22 2026 +0800"
      },
      "message": "validate query parameters echoed into builtin html pages (#3589)\n\n/hotspots/* wrote view and base into its inline script without the ValidProfilePath check that its *_non_responsive handler already applies, and /rpcz printed the pointer of the time parameter instead of the escaped value."
    },
    {
      "commit": "9ea2eae8f1abcf059735003d1a4f5c065f8bea01",
      "tree": "b8fdea8ab69e21fe3e8db40e51429cd30ba2637e",
      "parents": [
        "f5307aad6d416669575b1beef8ceb2e6e9df3d37"
      ],
      "author": {
        "name": "UB",
        "email": "ubed@bugqore.com",
        "time": "Mon Oct 12 10:10:28 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 12:40:28 2026 +0800"
      },
      "message": "reject out-of-range AMF numbers in ReadAMFUint32 (#3593)\n\nThe AMF0 number is a peer-controlled double; casting NaN or values outside [0, UINT32_MAX] to uint32_t is undefined behavior (UBSan float-cast-overflow) and decodes to different ids per platform. Validate the range before the cast."
    },
    {
      "commit": "f5307aad6d416669575b1beef8ceb2e6e9df3d37",
      "tree": "2b6b207c060d8cc326b82a87cf61d4a434d8c6bb",
      "parents": [
        "5f0741f23d6ce0b3770ba00463caa0d4ca4fb13f"
      ],
      "author": {
        "name": "sahvx655-wq",
        "email": "sahvx655@gmail.com",
        "time": "Mon Oct 12 10:09:30 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 12:39:30 2026 +0800"
      },
      "message": "reject stray amf0 object-end marker instead of CHECK-fatal in readers (#3597)"
    },
    {
      "commit": "5f0741f23d6ce0b3770ba00463caa0d4ca4fb13f",
      "tree": "7d255a4b694db7a1d90ee96160bdc0d944429bd4",
      "parents": [
        "74e2c92654f07024d456e00e428eb5449ad5a810"
      ],
      "author": {
        "name": "Felix-Gong",
        "email": "gongxiaofei24@iscas.ac.cn",
        "time": "Mon Oct 12 00:26:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 00:26:01 2026 +0800"
      },
      "message": "Rewrite RISC-V Zvbc CRC32C with adaptive VLEN and pure-vector folding (#3571)\n\nPR3332 introduced a Zvbc vector CRC32C path, but its implementation\nkept per-lane scalar round-trips (vector-\u003escalar xor-\u003evector) in the\nhot loop and fixed VLEN\u003d128 (vsetvl_e64m1(2)), so VLEN\u003e\u003d256 cores\nonly used half the width. On Spacemit X100 the Zvbc path measured\n~450-600 MB/s, slower than the scalar Zbc path (~1.5 GB/s), making\nthe \"Zvbc preferred\" dispatch a ~2.5x regression there.\n\nRewrite rv_crc32c_vclmul:\n\n  - adaptive VLEN: one e64m1 pair at VLEN\u003e\u003d256 (4 lanes) or two\n    pairs at VLEN\u003d128 (4 lanes carried on 2 vectors), so 128-bit\n    cores run the vector path at full width;\n  - pure-vector main loop: vlseg2e64 de-interleaved loads and\n    vclmul_vx broadcast constants (k1..k4), zero scalar extraction;\n  - all-vector reduction: single-element vector vclmul for the\n    4-to-1 lane merge and Barrett reduction, removing scalar-clmul\n    dependencies (safe on cores with Zvbc but no scalar Zbc, e.g.\n    SG2044);\n  - same fold constants and math as the scalar core -\u003e bit-exact.\n\nCorrectness on k3: RFC3720 vectors (4 standard PASS), Extend\ncomposition, 70 boundary/misalign/large combos, and the official\nCRC.* gtest suite (5/5 PASSED) all bit-consistent across\ntable/clmul/vclmul.\n\nPerformance on k3 (X100, VLEN\u003d256, 100-round median, same harness as\nPR3312):\n\n    len      PR3332 vclmul (MB/s)   this (MB/s)   speedup\n    1 KiB           578                 5895         10.2x\n    4 KiB           590                 9400         15.9x\n    64 KiB          600                11502         19.2x\n    1 MiB           508                11708         23.1x\n\nSigned-off-by: Xiaofei Gong \u003cgongxiaofei24@iscas.ac.cn\u003e\nSigned-off-by: YuanSheng \u003cyuansheng@isrc.iscas.ac.cn\u003e"
    },
    {
      "commit": "74e2c92654f07024d456e00e428eb5449ad5a810",
      "tree": "64412ae947a50d576a142b79a9d93c0cc8441bc3",
      "parents": [
        "929d439418509190ffdc0f3c871f89a79c052fc8"
      ],
      "author": {
        "name": "darion-yaphet",
        "email": "darion.yaphets@gmail.com",
        "time": "Sat Oct 10 13:59:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 10 13:59:21 2026 +0800"
      },
      "message": "fix(cmake): require all BoringSSL components (#3594)\n\nFail during dependency discovery when WITH_BORINGSSL is enabled and required components are missing.\n\nCheck the include directory, SSL library, and Crypto library separately to avoid reporting success for an incomplete library list."
    },
    {
      "commit": "929d439418509190ffdc0f3c871f89a79c052fc8",
      "tree": "7430c4122c2ab1725d66b9357234cbedc3284c33",
      "parents": [
        "d54ffe98f1ed956b1756800876100027894d7f80"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Fri Oct 09 17:41:23 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 09 17:41:23 2026 +0800"
      },
      "message": "Fix stack argument race in priority bthread scheduling (#3587)"
    },
    {
      "commit": "d54ffe98f1ed956b1756800876100027894d7f80",
      "tree": "7c7ac4df25b9f6f812f0effd424735df9684bf06",
      "parents": [
        "49085f190dedc36e09546c7ef0833bf2b97aad68"
      ],
      "author": {
        "name": "sahvx655-wq",
        "email": "sahvx655@gmail.com",
        "time": "Fri Oct 09 11:54:57 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 09 14:24:57 2026 +0800"
      },
      "message": "reject CR/LF in SetHttpURL and SetH2Path (#3588)\n\nBoth parsers copied control characters into _host/_path/_query/_fragment, which MakeRawHttpRequest and GenerateH2Path then wrote verbatim into the Host header, the request line and the HTTP/2 :path."
    },
    {
      "commit": "49085f190dedc36e09546c7ef0833bf2b97aad68",
      "tree": "c229507116ea4304c263430cdfab1dd50b51f892",
      "parents": [
        "043c6e1cf25d8b378b0fac2958bcb68adbffd361"
      ],
      "author": {
        "name": "Weibing Wang",
        "email": "wwbmmm@gmail.com",
        "time": "Fri Oct 09 11:10:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 09 11:10:33 2026 +0800"
      },
      "message": "Reject deeply nested JSON replies in naming services (#3592)\n\n* Reject deeply nested JSON replies in naming services\n\nThe consul, nacos and discovery naming services parsed registry replies\nwith rapidjson\u0027s default recursive parser, so a deeply nested reply\ncrashed the consuming process with stack exhaustion. rapidjson also\nbuilds, visits and destroys its DOM recursively, so iterative parsing\nalone is not enough.\n\nRoute all the reply parsing through a shared ParseNamingServiceJson()\nwhich parses iteratively (kParseIterativeFlag) and rejects replies\nnested deeper than kMaxNamingServiceJsonDepth (100, same default as\njson2pb) before parsing, bounding every recursion on the document.\nLegit replies of these services are only a few levels deep.\n\n* Address review: reject raw NUL and clamp depth in JSON pre-scan\n\n- A raw NUL is invalid JSON anywhere and rapidjson treats it as\n  end-of-input, so reject replies containing one up front: the depth\n  scan and the parser now accept exactly the same bytes.\n- Don\u0027t let the depth counter go negative on malformed text with more\n  closing than opening brackets.\n- Reword the comment about the state of `doc\u0027 when the depth limit is\n  exceeded: it is untouched rather than cleared.\n\n---------\n\nCo-authored-by: brpc-oncall \u003cbrpc-oncall@localhost\u003e"
    },
    {
      "commit": "043c6e1cf25d8b378b0fac2958bcb68adbffd361",
      "tree": "8cbac4b6f392f33116581dadc1cf0d93233a77ff",
      "parents": [
        "49f8d6f151ddbde6a2302d69a80479bc38fcac93"
      ],
      "author": {
        "name": "Andrei",
        "email": "46914650+alxrxs@users.noreply.github.com",
        "time": "Thu Oct 08 15:41:50 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 08 20:41:50 2026 +0800"
      },
      "message": "Post small RDMA messages inline (#3569)\n\n* Post small RDMA messages inline\n\nCutFromIOBufList() posts every message by reference, so the NIC has to\nread a small RPC from host memory before sending it. Request 236 bytes\nof inline data at QP creation, retrying without it if the device\nrefuses, and inline a message that fits the granted size and comes\nentirely from the RDMA block pool. 236 bytes is the largest Send whose\nWQE fits the 256-byte BlueFlame buffer of current mlx5 NICs.\n\nGenerated-by: Claude Code (Claude Opus 5.5)\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n\n* Refine the inline size limit and the QP creation fallback\n\nThe 236-byte limit keeps an inlined Send within the 256-byte BlueFlame\nbuffer of mlx5 NICs. Apply it only on Mellanox/NVIDIA devices (vendor\nID 0x02c9, kept from the device query GlobalRdmaInitializeOrDie already\ndoes); on other devices the inline size the QP was granted is the limit.\n\nIf QP creation with 236 bytes of inline data fails, try 64 bytes before\nfalling back to none. irdma (Intel E810) rejects requests above 101\nbytes, so on those NICs nothing was inlined.\n\nGenerated-by: Claude Code (Claude Opus 5.5)\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n\n* Try known inline limits, then step down\n\nAfter a refused 236-byte inline request, QP creation was retried with 64\nbytes, then with none. Devices take less than 236 by different amounts:\nIntel\u0027s irdma refuses more than 216, 101 or 48 bytes depending on the\ngeneration (101 on an E810, 48 on an X722), Alibaba\u0027s erdma more than\n96. With 64 as the only middle step, an E810 or erdma QP got 64 bytes, a\nnewer irdma QP 64 instead of 216, and an X722 QP none.\n\nThe verbs API cannot report the limit, so step down to it. A device\nwhose kernel driver has a fixed limit, found by the vendor ID kept from\nthe device query GlobalRdmaInitializeOrDie already does, starts there:\n216, then 101, then 48 on Intel, 96 on Alibaba, each capped at 236.\nOther devices start at 236. Each refused size is followed by the next\none 16 bytes smaller, down to 0, so a failure unrelated to inline data\nstill ends as before, after a few more attempts at QP creation. Devices\nthat accept 236 (mlx5, rxe) are unchanged. libfabric\u0027s verbs provider\nalso probes the limit by trial QP creation (vrb_find_max_inline()).\n\nGenerated-by: Claude Code (Claude Opus 5.5)\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n\n* Step down the inline size only on EINVAL, and add unit tests\n\nAllocateQp() retried with a smaller inline size after any ibv_create_qp\nfailure, so a failure unrelated to inline data, such as ENOMEM or the\ndevice\u0027s QP limit, led to up to 16 failed calls, and the caller\u0027s PLOG\nreported the errno of the last attempt. Step down only when the failed\ncall left errno \u003d\u003d EINVAL, which is how providers refuse an inline size;\nany other failure is returned at once with its errno. Each step is\nlogged under FLAGS_rdma_trace_verbose.\n\nQP creation moves into CreateQpWithInlineData(), which takes the vendor\nID as a parameter. It and InlineDataToRequest() are no longer static, so\nthat brpc_rdma_unittest can test them with a stubbed IbvCreateQp: the\nfirst request per vendor, the Mellanox cap at 236 bytes, Intel 216, 101\nand 48, Alibaba 96, an unknown device stepping down to 92, a non-EINVAL\nfailure stopping at once, and a device refusing every size ending at 0.\n\nGenerated-by: Claude Code (Claude Opus 5.5)\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n\n* Factor the inline send decision out and test it\n\nCutFromIOBufList() inlines a message only when it fits the inline size\nthe QP was granted and all of its blocks come from the block pool; user\nregistered memory may be device memory, which the CPU cannot copy from.\nMove that decision into ShouldPostInline(), exposed for UT, and test it\nin brpc_rdma_unittest: a pool-backed message at the granted size is\ninlined, one byte more is not, and a message in user registered memory\nnever is, however small.\n\nCutFromIOBufList() itself needs an initialized RDMA device: it returns\nearly in the unit test binary, sizes its SGE list from the device and\nlooks blocks up in the registered block pool. So the decision is tested\non its own; the send path is otherwise unchanged.\n\nGenerated-by: Claude Code (Claude Opus 5.5)\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n\n* Reuse the inline size of the last QP for new QPs\n\nAll QPs are created on the same device with the same attributes apart\nfrom their queue sizes, so a device that refuses the first inline size\nmade every one of the rdma_prepared_qp_cnt QPs repeat the same step-down\n(216, 101, 48 on an Intel device limited to 48 bytes). Remember the size\nthe last QP was created with and start there. If that size is refused,\nthe EINVAL step-down continues from it as before. Each QP still takes its\nown granted size from attr.cap.max_inline_data.\n\nGenerated-by: Claude Code (Claude Opus 5.5)\nCo-Authored-By: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "49f8d6f151ddbde6a2302d69a80479bc38fcac93",
      "tree": "1b397b265ade59ea498e0dfc314d1fc8ae78321d",
      "parents": [
        "2dca429d65ac4b2d30b5e8cdaa76893d65870f13"
      ],
      "author": {
        "name": "NeutralMilkHotel",
        "email": "wengshishuai@163.com",
        "time": "Wed Oct 07 17:54:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 07 17:54:10 2026 +0800"
      },
      "message": "Fix empty %b/%s argument dropped in redis command formatting (#3566)\n\n* Fix empty %b/%s argument dropped in redis command formatting (#2275)\n\n* Fix %s/%b variadic argument type mismatch in RedisCommandFormatV\n\n* Fix %b binary test to compare full payload bytes instead of ASSERT_STREQ\n\n* Tighten va_arg const char* comment in RedisCommandFormatV\n\n* Return false instead of CHECK-abort on AddCommand format errors"
    },
    {
      "commit": "2dca429d65ac4b2d30b5e8cdaa76893d65870f13",
      "tree": "9192ae58b71374600b25ba266570f92e841aebaa",
      "parents": [
        "d03cf2d4ce9bac299845c6d43724af96c5e45cd2"
      ],
      "author": {
        "name": "Xiaofeng Wang",
        "email": "wasphin@gmail.com",
        "time": "Wed Oct 07 11:53:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 07 11:53:36 2026 +0800"
      },
      "message": "Reject truncated consistent hashing replica keys (#3585)\n\nCheck snprintf results before hashing replica keys in the default and\nKetama policies. Reject formatting errors and truncated keys without\npartially updating the hash ring. Keep existing mappings for keys that\nfit the buffer.\n\nCover key-length boundaries, batch additions, and disabled tag hashing\nfor Murmur3, MD5, and Ketama."
    },
    {
      "commit": "d03cf2d4ce9bac299845c6d43724af96c5e45cd2",
      "tree": "d94de7dfddf48e8d70ea1f4fa7d2054a23be4065",
      "parents": [
        "b13bbcefecdc758a987973f1901b279e43ec521e"
      ],
      "author": {
        "name": "Weibing Wang",
        "email": "wwbmmm@gmail.com",
        "time": "Tue Oct 06 18:25:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 18:25:06 2026 +0800"
      },
      "message": "Reject truncated length-encoded integers in MySQL reply parser (#3575)\n\n* Reject truncated length-encoded integers in MySQL reply parser\n\nparse_encode_length did not check the return value of IOBuf::cutn, so a\ntruncated 0xFC/0xFD/0xFE prefix left part of the stack buffer\nuninitialized and mysql_uint*korr interpreted that garbage as the value.\nA malicious server could turn it into bogus column counts, field lengths\nor loop counts. Check cut1/cutn and return -1 on truncated or invalid\ninput; all call sites now fail with PARSE_ERROR_ABSOLUTELY_WRONG and the\nsix duplicated column-string blocks are folded into one helper.\n\n* Bound MySQL packet parsing to the packet payload\n\nAddress review feedback on the length-encoded integer hardening:\n\n1. parse_header now optionally cuts the packet payload into a separate\n   IOBuf and every sub-parser decodes from that bounded buffer, so a\n   truncated field can no longer borrow bytes from a coalesced next\n   packet and silently desync the stream.\n\n2. parse_encode_length returns bool with a uint64_t out-param instead\n   of an int64_t sentinel, which rejected legitimate values above\n   INT64_MAX (e.g. a 2^64-1 affected-rows count in OK packets).\n\nAdd regression tests for a truncated prefix followed by a coalesced\npacket and for the maximum encodable affected-rows value.\n\n* Fix MySQL reply dispatch for multi-byte column counts\n\nAddress review feedback: the dispatcher matched the first payload byte\nagainst synthetic MysqlRspType values, so a result set whose column\ncount used the multi-byte 0xFC form (252..65535 columns) was\nmisclassified as a prepare-ok and fed to unchecked fixed-width header\nreads; 0xFB/0xFD counts hit the unknown-type fallback; and every\n0xFE-leading packet was treated as EOF although MySQL only treats a\nSHORT (\u003c 9 payload bytes) 0xFE packet as EOF.\n\n- Dispatch fresh wire bytes 0x01..0xFE to the result-set parser;\n  prepare-ok resume is keyed on |_type| instead of the wire byte.\n- is_an_eof and the dispatcher now require payload \u003c 9 for EOF, so a\n  row starting with an 8-byte length-encoded value is a row.\n- All remaining unchecked fixed-width cuts (prepare-ok header, column\n  fixed fields, OK status/warnings, EOF, ERR sql-state, auth fixed\n  fields and NUL-terminated strings, binary row/field values, binary\n  TIME/DATETIME) go through a parse_fixed helper that rejects short\n  reads instead of using uninitialized stack memory.\n\nTests: 0xFC/251-column result sets parse; truncated 0xFC count, huge\n0xFE count, 0xFE-leading row and truncated prepare-ok are rejected;\nstandalone EOF and a full prepare-ok still parse.\n\n* Add truncated greeting tests for MySQL auth parser\n\nCover the review scenario directly: a greeting ending before the 4-byte\nthread id (previously left tmp partially uninitialized and continued)\nand a greeting with a non-NUL-terminated server version are both\nrejected.\n\n* Reject bare 0xFB header and zero column count in MySQL result sets\n\nA bare 0xFB is the length-encoded NULL marker, never a legal column\ncount (251 is encoded as FC FB 00). The widened fresh-dispatch range\naccepted it as a zero-column result set when followed by two EOF\npackets. Exclude 0xFB from result-set dispatch (it falls to the\nunknown-type rejection) and reject an explicitly encoded zero column\ncount in ResultSetHeader::Parse; a result set always carries at least\none column.\n\n* Fix greeting test NUL terminator and prefix-failure diagnostics\n\n- RejectTruncatedGreeting copied only 11 of the 12 bytes of\n  \"5.7.99-fake\\x00\", so it failed at the cut_until delimiter check\n  instead of exercising the truncated thread-id parse_fixed path it was\n  written for. Copy the terminating NUL.\n- parse_column_string now distinguishes a truncated/invalid length\n  prefix from an oversized length in its log message instead of\n  reporting a misleading \"length 0 exceeds ...\".\n- Rename AcceptSingleByte251ColumnCount to AcceptMultiByte251ColumnCount\n  to match the three-byte encoding it actually verifies.\n\n* Validate column/auth/ERR/prepare-ok filler bytes in MySQL parser\n\nRemaining unchecked pop_front calls on fixed filler fields silently\nremoved zero bytes from a truncated packet and accepted it as parsed:\nthe column definition\u0027s filler-length byte and final 2 reserved bytes,\nthe auth greeting\u0027s 10 reserved bytes, the ERR packet\u0027s \u0027#\u0027 sql_state\nmarker (now also validated) and the prepare-ok header\u0027s filler byte.\nConsume them through parse_fixed so a truncated tail is rejected.\nAdd tests for a column definition missing 1..3 tail bytes and for an\nERR packet without the \u0027#\u0027 marker.\n\n* Accept pre-4.1 initial-handshake ERR packets in MySQL parser\n\nAn ERR packet sent before capabilities are negotiated (e.g. the\n\u0027Too many connections\u0027 error) carries no \u0027#\u0027 and sql_state; the\nunconditional marker check rejected these legitimate packets during\nauthentication. Peek for the \u0027#\u0027 marker instead (as MySQL clients do):\nwhen present, parse the protocol-4.1 layout and keep rejecting a\ntruncated 5-byte sql_state; otherwise treat the whole tail as the\nmessage with an empty sql_state. This also drops the pre-existing\npayload_size \u003e\u003d 9 guard, which rejected short pre-4.1 errors, and\nskips the message allocation for an empty tail.\n\nFixes a fetch misuse found on the way: IOBuf::fetch returns a pointer\ninto its own storage when the range fits one block, so the marker must\nbe read through the returned pointer, not the aux buffer.\n\nTests: initial-handshake ERR parses with the full message, 4.1 ERR\nkeeps its sql_state, and a truncated sql_state is still rejected.\n\n* Select MySQL ERR layout from connection phase, not message content\n\nThe \u0027#\u0027 sniff could not distinguish a pre-4.1 initial-handshake error\nfrom a 4.1 error whose message starts with \u0027#\u0027: \u0027#quota exceeded\u0027\nwas misparsed as sql_state \u0027quota\u0027 + message \u0027 exceeded\u0027, and a short\n\u0027#bad\u0027 message was rejected as a truncated sql_state. Thread a\nprotocol41 flag from ParseMysqlMessage through ConsumePartialIOBuf\ninto Error::Parse: it is false only while the server greeting has not\nbeen processed yet (per-connection AuthContext group still empty),\nwhich is exactly when ERR packets use the pre-4.1 layout (\u0027Too many\nconnections\u0027); after the HandshakeResponse41 and in the command phase\nthe 4.1 layout (\u0027#\u0027 + sql_state) is required.\n\nTests: legacy messages starting with \u0027#\u0027 (long and short) keep their\nmessage intact with an empty sql_state, a 4.1 error whose message\nstarts with \u0027#\u0027 still parses marker + sql_state, plus the existing\ninitial-handshake / truncated-sql-state / plain 4.1 controls.\n\n* Keep legacy MySQL ConsumePartialIOBuf symbols for ABI compatibility\n\nA defaulted protocol41 parameter preserves source compatibility but\nchanges the mangled symbol, breaking prebuilt clients that link against\nthe old signatures. Restore both legacy signatures as out-of-line\nwrappers that forward protocol41\u003dtrue, and drop the default argument\nfrom the new overloads so overload resolution stays unambiguous.\n\n* Add binary-row truncation regression tests for MySQL parser\n\nThe short-read hardening of the binary protocol path (NULL bitmap,\nfixed-width values, string/TIME/DATETIME lengths) had no coverage:\nall unit tests used the text protocol and the prepared-statement\nintegration tests need a live server. Add synthetic\nMYSQL_PREPARED_STATEMENT result sets with a valid control row plus\ntruncated NULL bitmap, truncated LONGLONG value, truncated string\nlength prefix/value and truncated TIME/DATETIME values, each followed\nby a coalesced EOF packet to verify that decoding never borrows bytes\nfrom the next packet.\n\n* Fix hex-escape over-read in binary string-field test\n\nThe \\x00ab escape greedily consumes the following hex digits, so the\nliteral held 4 bytes while std::string(str, 5) copied five -- a\nglobal-buffer-overflow caught by the ASan CI build. Split the literal\nafter \\x00 so the escape terminates at the quote; the adjacent-literal\nconcatenation yields the intended 5 bytes fc 05 00 \u0027a\u0027 \u0027b\u0027.\n\n---------\n\nCo-authored-by: brpc-oncall \u003cbrpc-oncall@localhost\u003e"
    },
    {
      "commit": "b13bbcefecdc758a987973f1901b279e43ec521e",
      "tree": "7a5e83e7f4cc6f83813cf6e87975cfa3b60b6e2e",
      "parents": [
        "84286d2f1b7982ae8ba3d8e734685bdeb0685101"
      ],
      "author": {
        "name": "Xiaofeng Wang",
        "email": "wasphin@gmail.com",
        "time": "Tue Oct 06 18:21:57 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 18:21:57 2026 +0800"
      },
      "message": "Validate Consul response object types (#3584)\n\nCheck that each node and its Service value are JSON objects before using\nobject accessors. Skip invalid entries while retaining valid services and\nreject responses containing only invalid entries.\n\nAdd HTTP client/server regression coverage for non-object values at both\nboundaries, mixed valid and invalid entries, and stale result clearing."
    },
    {
      "commit": "84286d2f1b7982ae8ba3d8e734685bdeb0685101",
      "tree": "3d8701ac20fb9e8d4e839fe3a92d8779de45e1e2",
      "parents": [
        "d69b9ea5364b341562cfb0c3b1918ea7ed8b277a"
      ],
      "author": {
        "name": "pynj2026",
        "email": "159674473+pynj2026@users.noreply.github.com",
        "time": "Tue Oct 06 15:54:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 15:54:43 2026 +0800"
      },
      "message": "Fix GCC 16 compile Error (#3583)\n\n* Fix GCC 16 compile Error:\n1.The -D__STRICT_ANSI__ in CMakeLists.txt conflicts with libstdc++ 16\u0027s\n__int128 specialization\n   2. H2StreamContext is incomplete, so sizeof throws an error, causing\n      unique_ptr to fail\n\n* Fix GCC 16 compile Error:\n1. Remove __STRICT_ANSI__ definition instead of probing it\n\n---------\n\nCo-authored-by: panyfx \u003c8242454+panyfx@user.noreply.gitee.com\u003e"
    },
    {
      "commit": "d69b9ea5364b341562cfb0c3b1918ea7ed8b277a",
      "tree": "7fa5207f8f0f56080e6ff12141ab599db2bf0029",
      "parents": [
        "bac1b3b2be6f84dbe86fbb7b3c8760e9655b70f3"
      ],
      "author": {
        "name": "Xiaofeng Wang",
        "email": "wasphin@gmail.com",
        "time": "Tue Oct 06 10:34:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 06 10:34:01 2026 +0800"
      },
      "message": "Add latency recorder window statistics test (#3582)\n\nExercise latency observations split across sampler ticks using a window\nlonger than the bounded wait budget. Confirm the sampled count is complete\nbefore checking the sum and average from the saved snapshot, and verify\nthe maximum through its independent sampler."
    },
    {
      "commit": "bac1b3b2be6f84dbe86fbb7b3c8760e9655b70f3",
      "tree": "1dd633c23c8ebc0f82f0c4532c13121e3e2f0476",
      "parents": [
        "3ee7ef6dd7828ab39bed885a2bd8c7251a99111b"
      ],
      "author": {
        "name": "Weibing Wang",
        "email": "wwbmmm@gmail.com",
        "time": "Mon Oct 05 23:18:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 05 23:18:04 2026 +0800"
      },
      "message": "Reject malformed mcpack input instead of CHECK-fatal in parser (#3576)\n\n* Reject malformed mcpack input instead of CHECK-fatal in parser\n\nThe mcpack2pb parser used CHECK(false) to handle malformed input in\nunbox(), the object/array/isoarray iterators and the value conversion\nfunctions. CHECK(false) logs at FATAL level and aborts the process when\n-crash_on_fatal_log is on, so a single malformed nshead+mcpack request\ncould terminate a server and drop all in-flight requests (CWE-617).\n\nReplace the wire-controlled CHECK(false) sites with LOG(ERROR) plus the\nexisting error propagation (set_bad()/return 0, which the generated\nparsing code checks), and mark the stream bad in unbox() and the\ntruncated as_string()/as_binary() paths so failed parses are reported\nby stream()-\u003egood() as before. The serializer and code-generator CHECKs\nare untouched since they are not driven by network input.\n\n* Avoid wire-controlled eager resize in as_string/as_binary\n\nFollow-up to the CHECK(false) hardening: the claimed value size of\nstring/binary fields comes from the wire and can be close to UINT32_MAX.\nresize(size) before reading allocates that amount up front, so a tiny\nrequest could trigger an uncaught std::bad_alloc/std::length_error and\nstill terminate the process.\n\nRead in bounded chunks and grow the output only for bytes that are\nactually present; a short read marks the stream bad as before.\n\n* Reject truncated primitive reads in cut_packed_pod\n\nThe value-returning InputStream::cut_packed_pod\u003cT\u003e() left its result\nuninitialized when cutn() read fewer than sizeof(T) bytes, which is\nreachable when the enclosing object declares enough bytes but the real\ninput ends inside a primitive value. The indeterminate value was then\nconsumed or logged (UB), and the parse continued as if the input were\ncomplete.\n\nZero-initialize the result, return a zero value and mark the stream bad\non a short read, so the generated code fails the parse. The pointer\nversion is unchanged: its callers already check the returned size.\n\n* Validate the trailing NUL when reading mcpack strings\n\nas_string() skipped the trailing byte with popn(1), which returns 0 on\nan exhausted stream and leaves it good. A string whose content was\npresent but whose stream ended exactly before the required trailing\n\u0027\\0\u0027 (or ended with a non-NUL byte) was therefore accepted as valid.\n\nRead the terminator and reject the input when it is missing or not a\nNUL, marking the stream bad and clearing the output.\n\n* Avoid double copy of valid string/binary payload\n\ncut_bytes_to_string() copied every byte twice on valid input: once from\nthe input into a stack buffer and once into the destination string. Grow\nthe destination by at most one 8 KiB chunk at a time and cut directly\ninto it, restoring the single-copy behavior of the original resize+cutn\npath while keeping the bounded allocation.\n\n---------\n\nCo-authored-by: brpc-oncall \u003cbrpc-oncall@localhost\u003e"
    },
    {
      "commit": "3ee7ef6dd7828ab39bed885a2bd8c7251a99111b",
      "tree": "83025667c6db685a78a5332e27ea289ceb428fb9",
      "parents": [
        "d1811b8a88fa2d2d42b107b03fd7652cfa8c6c15"
      ],
      "author": {
        "name": "li-lizhe",
        "email": "82501526+li-lizhe@users.noreply.github.com",
        "time": "Mon Oct 05 23:15:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 05 23:15:39 2026 +0800"
      },
      "message": "fix(fuzzing): return 0 (not 1) from the size guard in every harness (#3579)\n\nLLVMFuzzerTestOneInput may only return 0 (input consumed) or -1 (input\nrejected); libFuzzer asserts this after every call\n(compiler-rt/lib/fuzzer/FuzzerLoop.cpp:622) and runs the empty input first,\nso every harness here aborts an assert-enabled libFuzzer at startup.\nReturning 0 keeps out-of-range inputs out of the corpus (the harness body is\nstill skipped) and matches the convention newer harnesses already use.\nAll 18 test/fuzzing/fuzz_*.cpp harnesses share the same guard.\n\nSigned-off-by: li-lizhe \u003c147392333@qq.com\u003e"
    },
    {
      "commit": "d1811b8a88fa2d2d42b107b03fd7652cfa8c6c15",
      "tree": "60d827b205b8d2a1aa9eac57e5a7001731a4cf84",
      "parents": [
        "df611712424c3b7a96251ebd66fb55c85de6455a"
      ],
      "author": {
        "name": "Xiaofeng Wang",
        "email": "wasphin@gmail.com",
        "time": "Mon Oct 05 16:46:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 05 16:46:30 2026 +0800"
      },
      "message": "Fix timing assumptions in multidimensional latency recorder test (#3581)\n\n* Fix timing assumptions in multidimensional latency recorder test\n\nWait for asynchronous sampling with a bounded five-second timeout instead\nof assuming a one-second sleep is sufficient. Check positive QPS without\nassuming a minimum rate of seven requests per second.\n\nUse nonfatal assertions for independent metrics and restore modified\nflags automatically on all test exit paths.\n\n* Preserve sampled metrics in latency recorder test\n\nCache each nonzero latency, maximum latency, and QPS observation while\npolling. Assert the cached values so a sampler tick cannot clear the\none-second windows between polling and the assertions.\n\nInclude QPS in the readiness check and preserve successful observations\nindependently when sampler ticks occur between metric reads."
    },
    {
      "commit": "df611712424c3b7a96251ebd66fb55c85de6455a",
      "tree": "a7d827baa82e66cc246b434107244ff01115789b",
      "parents": [
        "3f35c2c77ae327ef4dbb700b2a4f181ecba1ccce"
      ],
      "author": {
        "name": "Xiaofeng Wang",
        "email": "wasphin@gmail.com",
        "time": "Mon Oct 05 12:24:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 05 12:24:02 2026 +0800"
      },
      "message": "Validate RPC response sockets (#3580)\n\n* Validate RPC response sockets\n\nCheck that responses arrive on the socket used by the matching request\nattempt before updating the controller. Account for current attempts and\nunfinished backup requests across the four protobuf RPC protocols.\n\nAdd Hulu response tests for matching and mismatched sockets while keeping\ndirect response injection compatible with existing internal callers.\n\n* Expand RPC response socket test coverage\n\nVerify rejection and subsequent completion on the sending socket for\nbaidu_std, sofa_pbrpc, and public_pbrpc response handlers.\n\nExercise real channel/server calls across all four affected protocols and\ntheir supported connection types using an ephemeral server port.\n\n* Tighten rejected RPC response handling\n\nAccept the base correlation ID only for direct response injection without\na sending socket. Real requests must match a versioned attempt ID.\n\nReset all advertised streams on the arrival socket when rejecting a\nbaidu_std response. Extend the regression test to check both rejection\npaths and successful completion by the valid response."
    },
    {
      "commit": "3f35c2c77ae327ef4dbb700b2a4f181ecba1ccce",
      "tree": "a9f80e01372838e64aa05c179d787f10246f3258",
      "parents": [
        "2621a26088897ec904e8483ef0ea68c6ad5a1131"
      ],
      "author": {
        "name": "darion-yaphet",
        "email": "darion.yaphets@gmail.com",
        "time": "Sun Oct 04 22:54:53 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 04 22:54:53 2026 +0800"
      },
      "message": "fix(redis): avoid formatted command overread (#3570)\n\nRetry formatted values in dynamically sized storage when vsnprintf reports\nan output larger than the stack buffer. Add a vector-based RedisRequest\ncomponent overload and use it for authentication and cluster command\nconstruction while retaining the existing format APIs.\n\nAdd coverage for wide numeric formatting, binary-safe components, and\nAUTH/SELECT credential encoding.\n\nVerified with RedisCommandFormatTest.* and\nRedisClusterChannelTest.basic_routing_and_multi_key_commands."
    },
    {
      "commit": "2621a26088897ec904e8483ef0ea68c6ad5a1131",
      "tree": "70f962dbed227a5d7e3d25cca7fe938c24e30ff1",
      "parents": [
        "dd43e724296f54773bc4e108863d206f04397f61"
      ],
      "author": {
        "name": "Weibing Wang",
        "email": "wwbmmm@gmail.com",
        "time": "Thu Oct 01 18:02:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 01 18:02:40 2026 +0800"
      },
      "message": "Fix bthread_id lock leak in ProcessNsheadMcpackResponse (#3574)\n\n* Fix bthread_id lock leak in ProcessNsheadMcpackResponse\n\nAfter ProcessNsheadMcpackResponse acquires the bthread_id lock, its two\nearly-return paths (response object missing, mcpack parse failure) skip\naccessor.OnResponse(), the only unlock entry. The leaked lock makes\nJoin(correlation_id) hang forever and the RPC timeout cannot rescue it\nsince the timeout error is only consumed during unlocking. A server\nreturning a valid nshead header plus a malformed mcpack body reliably\ntriggers this.\n\nAdopt the do { ... break ... } while(0) pattern (consistent with\nProcessRpcResponse) so that OnResponse() is always reached.\n\n* Close unused pipe read end in nshead_mcpack unittest fixture\n\n* Fix compile error with new protobuf in nshead_mcpack unittest\n\nDescriptor::full_name() returns absl::string_view since protobuf 35.x,\nwhich cannot be implicitly converted to the const std::string\u0026 parameter\nof mcpack2pb::register_message_handler_or_die. Wrap it into std::string\nexplicitly.\n\n---------\n\nCo-authored-by: brpc-oncall \u003cbrpc-oncall@localhost\u003e"
    },
    {
      "commit": "dd43e724296f54773bc4e108863d206f04397f61",
      "tree": "05c2c4d64b2d2a42e388adc00c309e35ed048122",
      "parents": [
        "535d8f89f857b62c4bac9da7875c1fc79309cd0a"
      ],
      "author": {
        "name": "UB",
        "email": "ubed@bugqore.com",
        "time": "Wed Sep 30 09:12:19 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 30 11:42:19 2026 +0800"
      },
      "message": "Fix use-after-free of response header in ParseMemcacheMessage (#3572)"
    },
    {
      "commit": "535d8f89f857b62c4bac9da7875c1fc79309cd0a",
      "tree": "f3580aa5bb71ca7fdb79131daf7d516baed4609d",
      "parents": [
        "0c42a0c9591265b72e688a0d8e309ac891e9c856"
      ],
      "author": {
        "name": "Xiaofeng Wang",
        "email": "wasphin@gmail.com",
        "time": "Sun Sep 27 10:57:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 27 10:57:26 2026 +0800"
      },
      "message": "Stabilize backup request policy test cleanup (#3564)"
    },
    {
      "commit": "0c42a0c9591265b72e688a0d8e309ac891e9c856",
      "tree": "4ad5ec2319c364fcdb5b54ae0919991bf7616242",
      "parents": [
        "e459f88dfdffb10887a3e437fe54fadb5daaf271"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Sat Sep 26 19:25:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 26 19:25:34 2026 +0800"
      },
      "message": "Fix flaky histogram window test (#3567)"
    },
    {
      "commit": "e459f88dfdffb10887a3e437fe54fadb5daaf271",
      "tree": "b16d96d1d63f6aa229e0a822ca62ec41a00953a6",
      "parents": [
        "8ef336ea6cefcf16d4b1264f1f70af2cc677846b"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Fri Sep 25 20:56:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 25 20:56:16 2026 +0800"
      },
      "message": "Fix port conflicts in parallel unit tests (#3568)\n\n* Fix port conflicts in parallel unit tests\n\n* Isolate naming service test state"
    },
    {
      "commit": "8ef336ea6cefcf16d4b1264f1f70af2cc677846b",
      "tree": "b10278a02cd50896909a77ec84bf28517b9800bf",
      "parents": [
        "e9c8100ff03155f66eb6847106ce06b88a9a9949"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Thu Sep 24 17:53:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 17:53:40 2026 +0800"
      },
      "message": "Stabilize timing-sensitive bthread tests and fix the butex interruption race (#3545)\n\n* Stabilize timing-sensitive bthread tests and fix the butex interruption race\n\n* Fix pthread_kill get ESRCH\n\n* Use a non-fatal assertion\n\n* Fix some issues\n\n* Check and set task-\u003einterrupted under task-\u003eversion_lock\n\n* Fix butex_requeue UT"
    },
    {
      "commit": "e9c8100ff03155f66eb6847106ce06b88a9a9949",
      "tree": "484527eacd00aaf136dce9224604291d27a5bb5d",
      "parents": [
        "6ab8c0e3777249d7569b7275bac185ecf488f80a"
      ],
      "author": {
        "name": "darion-yaphet",
        "email": "darion.yaphets@gmail.com",
        "time": "Thu Sep 24 16:51:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 24 16:51:20 2026 +0800"
      },
      "message": "Fix wrong project and target names in auto_concurrency_limiter example CMakeLists (#3565)"
    },
    {
      "commit": "6ab8c0e3777249d7569b7275bac185ecf488f80a",
      "tree": "692921dd77e5846861c169b5832adb0c7dcf4888",
      "parents": [
        "bc010e7c89560cdd1d671e35686b4e49be541cb3"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Wed Sep 23 18:56:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 18:56:01 2026 +0800"
      },
      "message": "Fix Maxer default value for floating-point types (#3563)"
    },
    {
      "commit": "bc010e7c89560cdd1d671e35686b4e49be541cb3",
      "tree": "8870e1826cf730f75402daadc8fe68942ce7861f",
      "parents": [
        "b4732eb846196a9b9b44bb377ce0dba64ab12ffe"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Wed Sep 23 10:54:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 10:54:10 2026 +0800"
      },
      "message": "Support higher performance histogram (#3561)\n\n* Support higher performance histogram\n\n* Fix some issues"
    },
    {
      "commit": "b4732eb846196a9b9b44bb377ce0dba64ab12ffe",
      "tree": "bf9105ef5b78946f44c160a3b5e517bacf2c4b3d",
      "parents": [
        "8445763165f3a1b381c54eb6fb1c1bc4f26ebb8e"
      ],
      "author": {
        "name": "Xiaofeng Wang",
        "email": "wasphin@gmail.com",
        "time": "Wed Sep 23 10:26:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 10:26:55 2026 +0800"
      },
      "message": "Stabilize butex stop-after-running test (#3562)"
    },
    {
      "commit": "8445763165f3a1b381c54eb6fb1c1bc4f26ebb8e",
      "tree": "19707c1e478bd6b5845f29d38984e1447bd1fd19",
      "parents": [
        "dd1eedfa9f4a1b5c1c773c2742bd117d1cab10ef"
      ],
      "author": {
        "name": "Weibing Wang",
        "email": "wwbmmm@gmail.com",
        "time": "Wed Sep 23 10:07:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 10:07:20 2026 +0800"
      },
      "message": "Bound total array allocation of one redis reply by -redis_max_allocation_size (#3560)\n\n* Bound total array allocation of one redis reply by -redis_max_allocation_size\n\nThe redis reply parser capped each array allocation individually and the\nnesting depth separately, but nothing bounded the two together: nesting a\nmaximally-sized array inside another committed depth * cap bytes from a\ntiny reply. Thread a per-reply byte budget through\nRedisReply::ConsumePartialIOBuf, save it in the root array when the\nparsing suspends and restore it on resume so that withholding data cannot\nreset it.\n\nAlso stop pre-resizing RedisCommandParser::_args from a declared RESP\narray count; grow it as the arguments actually arrive so that a ~12-byte\nincomplete command no longer commits up to the cap per connection.\n\n* Initialize used_bytes in RedisReply::Reset()\n\nArrays built by user code (e.g. SetArray) never went through the reply\nparser, so the new used_bytes field could hold an indeterminate value\nthat CopyFromDifferentArena would read. Initialize it in Reset(), which\nevery construction path goes through.\n\n---------\n\nCo-authored-by: brpc-oncall \u003cbrpc-oncall@localhost\u003e"
    },
    {
      "commit": "dd1eedfa9f4a1b5c1c773c2742bd117d1cab10ef",
      "tree": "e5a41609804f02018a792c5512ace870f7299a07",
      "parents": [
        "5866e11d624ed375eb2925bcce276dcdfe91baba"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Tue Sep 22 15:20:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 22 15:20:06 2026 +0800"
      },
      "message": "Support bvar::Histogram and fix Prometheus name/label conflicts between bvar and mbvar (#3557)\n\n* Support bvar::Histogram and fix Prometheus name/label conflicts between bvar and mbvar\n\n* Fix MVariableBase::dump_exposed return type\n\n* Fix some issues\n\n* Fix json output\n\n* Move the deduplication into PrometheusMetricsDumper"
    },
    {
      "commit": "5866e11d624ed375eb2925bcce276dcdfe91baba",
      "tree": "808b42f882af6d61242c84b51e0760aca1fe7518",
      "parents": [
        "c79b3ffd67b599deb8c0badd0dc75c854a28d0fd"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Tue Sep 22 14:02:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 22 14:02:27 2026 +0800"
      },
      "message": "Fix use-after-free in RTMP test sender lifetime management (#3543)\n\n* Fix use-after-free in RTMP test sender lifetime management\n\n* Fix skipped bthread_stop\n\n* Make the ownership clear"
    },
    {
      "commit": "c79b3ffd67b599deb8c0badd0dc75c854a28d0fd",
      "tree": "80c9cc0090390584f84d1e4e3208362022f0cac5",
      "parents": [
        "ab532daf10b52c1b683e2dc7cdfacb8ec96987d2"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Tue Sep 22 10:38:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 22 10:38:21 2026 +0800"
      },
      "message": "Fix two races between butex_wait() and TaskGroup::interrupt() (#3551)\n\n* Fix two races between butex_wait() and TaskGroup::interrupt()\n\n* Fix self-deadlock in wait_for_butex() when TimerThread::schedule() fails"
    },
    {
      "commit": "ab532daf10b52c1b683e2dc7cdfacb8ec96987d2",
      "tree": "5af91e041bb50047c4a08c58a4f1c3a485bdfdf3",
      "parents": [
        "754eeb98d316a5199e0080d374d51d12682af362"
      ],
      "author": {
        "name": "Chuang Zhang",
        "email": "zchuang185@gmail.com",
        "time": "Mon Sep 21 16:38:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 16:38:08 2026 +0800"
      },
      "message": "Add UBRing data format negotiation (#3507)\n\n* Add UBRing data format negotiation (#34)\n\n* Fix unaligned UBRing ACK access\n\n* Use direct list initialization for HelloMessage\n\n---------\n\nCo-authored-by: BGQ99 \u003c1132767344@qq.com\u003e"
    },
    {
      "commit": "754eeb98d316a5199e0080d374d51d12682af362",
      "tree": "ea11882b5234ca424e56f743522140ebd0966f8c",
      "parents": [
        "ea127c70a7bf3a6b9869435c477ed7ce02e166dc"
      ],
      "author": {
        "name": "Xiaofeng Wang",
        "email": "wasphin@gmail.com",
        "time": "Mon Sep 21 14:36:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 14:36:05 2026 +0800"
      },
      "message": "Stabilize butex stop-before-running test (#3556)\n\nRemove the 5 ms completion-time assertion from the stop-before-running test.\nScheduler latency is not part of the tested API contract, while the existing\nassertions still verify interruption, joining, and repeated stop behavior."
    },
    {
      "commit": "ea127c70a7bf3a6b9869435c477ed7ce02e166dc",
      "tree": "5bde0054d64a308025abbddc5f613709e5f2ab33",
      "parents": [
        "2ce519a537955ac2a031db3bc5a2b60f8dd0e93a"
      ],
      "author": {
        "name": "Xiaofeng Wang",
        "email": "wasphin@gmail.com",
        "time": "Mon Sep 21 14:33:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 21 14:33:09 2026 +0800"
      },
      "message": "Stabilize butex join test (#3554)\n\nValidate sleep and join semantics directly.\n\nAvoid requiring worker threads to resume within a narrow scheduling window."
    },
    {
      "commit": "2ce519a537955ac2a031db3bc5a2b60f8dd0e93a",
      "tree": "f378cd1a60d57c2abaf357d283b3f00ff08730f6",
      "parents": [
        "b9cacbae1a92618964faca178f1828cfbd604c22"
      ],
      "author": {
        "name": "Weibing Wang",
        "email": "wwbmmm@gmail.com",
        "time": "Sat Sep 19 15:07:18 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 19 15:07:18 2026 +0800"
      },
      "message": "Update new commiter doc (#3555)"
    },
    {
      "commit": "b9cacbae1a92618964faca178f1828cfbd604c22",
      "tree": "705445b2984dc39ff4681d67c1fbc3900157f61e",
      "parents": [
        "0b990a067becd3a7e7dff2a795daa614c902a3e7"
      ],
      "author": {
        "name": "hesphoros",
        "email": "hesphoros@gmail.com",
        "time": "Sat Sep 19 13:30:13 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 19 13:30:13 2026 +0800"
      },
      "message": "Let CMake manage NDEBUG by build configuration (#3553)"
    },
    {
      "commit": "0b990a067becd3a7e7dff2a795daa614c902a3e7",
      "tree": "4ecc062591501b780fd5184a85f9668b7e2cf359",
      "parents": [
        "46c218058000d86aaff6eaf475629d6bcb37fcfe"
      ],
      "author": {
        "name": "hesphoros",
        "email": "hesphoros@gmail.com",
        "time": "Sat Sep 19 10:56:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 19 10:56:35 2026 +0800"
      },
      "message": "Reuse standard CMake build directory in docs (#3552)"
    },
    {
      "commit": "46c218058000d86aaff6eaf475629d6bcb37fcfe",
      "tree": "a97024d4d161dd799b76a329cfd2105a64236a86",
      "parents": [
        "64480c7cab9dce80bdb4e7a4d57a4fd58903ef1a"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Fri Sep 18 21:46:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 21:46:48 2026 +0800"
      },
      "message": "Fix ineffective enable_if constraints in bvar and butil (#3547)\n\n* Fix ineffective enable_if constraints in bvar and butil\n\n* Add reset UT\n\n* Use std::enable_if_t instead of std::enable_if::type\n\n* Opt BabylonVariable::reset() comment"
    },
    {
      "commit": "64480c7cab9dce80bdb4e7a4d57a4fd58903ef1a",
      "tree": "8bb602d0826c909e160017a064b2ac427d9802c4",
      "parents": [
        "abc5595a8abf482c48aaa867a31505d547a73665"
      ],
      "author": {
        "name": "Chuang Zhang",
        "email": "zchuang185@gmail.com",
        "time": "Fri Sep 18 17:58:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 17:58:08 2026 +0800"
      },
      "message": "feat: add URMA transport support (#3428)\n\n* Add URMA transport support\n\n* fix: address review comments on naming, IOBuf sizing and UMDK pinning\n\n- Rename ack_bit_is_rdma_ok to ack_bit_is_urma_ok.\n- Replace hard-coded IOBuf block header size with sizeof(butil::IOBuf::Block).\n- Pin UMDK dependency to a specific commit instead of a mutable tag.\n\n* modify the bazel docs and refine the ut\n\n* add DOWNLOAD_URMA_HEADERS lacks Bazel build support\n\n* Fix Bazel URMA mock source selection\n\n* Fix URMA review issues after input refactor\n\n* Clarify Bazel URMA source selection\n\n* force Restore InputMessenger formatting\n\n* reformat the code base on master\n\n---------\n\nCo-authored-by: Winchell \u003ccw20050111@gmail.com\u003e\nCo-authored-by: Gzure \u003c740684863@qq.com\u003e"
    },
    {
      "commit": "abc5595a8abf482c48aaa867a31505d547a73665",
      "tree": "b93e646b5f58e7e8dafc84fc1f98a0b958d1859f",
      "parents": [
        "2ebae47e61213f313ce8942d47f37b29598768d3"
      ],
      "author": {
        "name": "Chuang Zhang",
        "email": "zchuang185@gmail.com",
        "time": "Fri Sep 18 17:33:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 17:33:32 2026 +0800"
      },
      "message": "fix: preserve XMM6-XMM15 in x86_64 bthread context switch (#3495)\n\n* Fix clang (#28)\n\n\n\nCo-authored-by: LinQuickDev \u003cLinQuickDev@users.noreply.github.com\u003e\n\n* fix: preserve SSE state in x86_64 bthread context switch (#31)\n\n---------\n\nCo-authored-by: LinQuickDev \u003cLinQuickDev@users.noreply.github.com\u003e\nCo-authored-by: Spicy-cream \u003c2667314914@qq.com\u003e"
    },
    {
      "commit": "2ebae47e61213f313ce8942d47f37b29598768d3",
      "tree": "ba204a58af2142d933824a43f7344503ffe292a3",
      "parents": [
        "8f7c18cef4819d42a24aba1e949f5dbe50da9e92"
      ],
      "author": {
        "name": "hesphoros",
        "email": "gj3372819612@163.com",
        "time": "Fri Sep 18 11:39:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 11:39:31 2026 +0800"
      },
      "message": "Document Debug CMake build on Apple Silicon (#3548)\n\n* Document Debug CMake build on Apple Silicon\n\n* Fix formatting and clarify CMake usage for brpc\n\nUpdate instructions for using CMake to compile Debug version of brpc on Apple Silicon.\n\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e\n\n* Address CMake documentation review\n\n---------\n\nCo-authored-by: Copilot Autofix powered by AI \u003c175728472+Copilot@users.noreply.github.com\u003e"
    },
    {
      "commit": "8f7c18cef4819d42a24aba1e949f5dbe50da9e92",
      "tree": "45320156510729e7432a2ff0b77b5d943d360dd4",
      "parents": [
        "e97cff7d586d2c2f326557977b0025fac5f4974d"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Fri Sep 18 00:45:57 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 18 00:45:57 2026 +0800"
      },
      "message": "Release Apache bRPC 1.18.0 (#3550)"
    },
    {
      "commit": "e97cff7d586d2c2f326557977b0025fac5f4974d",
      "tree": "05e7479448ef749ed8ecc4100e0f566ccb0b894a",
      "parents": [
        "8102b17d59f39166f4c5b6e2fe98c2319eca9689"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Thu Sep 17 23:13:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 23:13:19 2026 +0800"
      },
      "message": "Make Prometheus latency output consistent between LatencyRecorder and its multi dimension version (#3549)\n\n* Make Prometheus latency output consistent between LatencyRecorder and its multi dimension version\n\n* Opt MultiDimension::dump_impl"
    },
    {
      "commit": "8102b17d59f39166f4c5b6e2fe98c2319eca9689",
      "tree": "34bfc549466b72faf4ef1ef10d0dfb5d31c2718e",
      "parents": [
        "8b2410d20b8b32c5700537a0ed1cdcdaa6bc491b"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Wed Sep 16 22:37:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 22:37:12 2026 +0800"
      },
      "message": "Support seqlock and use it for TaskGroup CPU time stat (#3541)"
    },
    {
      "commit": "8b2410d20b8b32c5700537a0ed1cdcdaa6bc491b",
      "tree": "361f5128de542d265d3fcdab8ea4dd7a21aa8ef9",
      "parents": [
        "09f36c53b5d36b0c86c91dad3aeba8c736fa98fa"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Tue Sep 15 21:55:07 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 21:55:07 2026 +0800"
      },
      "message": "Fix client source IP binding loss after socket revival (#3544)"
    },
    {
      "commit": "09f36c53b5d36b0c86c91dad3aeba8c736fa98fa",
      "tree": "8faa29effc24980468ff9ab4df59100f91aad5d2",
      "parents": [
        "023dc4f8bda4a888004fe2ed2a17ab9940ab6d44"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Tue Sep 15 21:54:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 21:54:37 2026 +0800"
      },
      "message": "Fix lost wakeup in ParkingLot waiter check (#3539)"
    },
    {
      "commit": "023dc4f8bda4a888004fe2ed2a17ab9940ab6d44",
      "tree": "a23c5995185840a1b526b23c581ac35c1c96e886",
      "parents": [
        "bb0861e1830c03031ab333e123c8caffa5e71b57"
      ],
      "author": {
        "name": "Bright Chen",
        "email": "chenguangmingfe@foxmail.com",
        "time": "Tue Sep 15 16:54:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 16:54:34 2026 +0800"
      },
      "message": "Bound the number of http headers and query parameters per message (#3524)"
    },
    {
      "commit": "bb0861e1830c03031ab333e123c8caffa5e71b57",
      "tree": "4a08d8d2c8c0e24cb612304f09003cddf9e7cdaa",
      "parents": [
        "e69943bffff7d3ceb9cd0e0d0f81d6c2692ee401"
      ],
      "author": {
        "name": "Weibing Wang",
        "email": "wwbmmm@gmail.com",
        "time": "Mon Sep 14 13:16:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 13:16:36 2026 +0800"
      },
      "message": "Escape HTML output in builtin /flags service (#3529)\n\n* Escape HTML output in builtin /flags service\n\nThe ?setvalue\u003d confirmation message and the ?setvalue\u0026withform page\nwrote the gflag name/value into the html page without escaping, unlike\nthe flag list page which already escapes values with HtmlReplace.\nEscape them with WebEscape like rpcz_service does. Plain text output\nis unchanged.\n\n* Use FlagSaver in flags_escaping unittest\n\nReplace the manual save/restore of the modified gflag with\nGFLAGS_NAMESPACE::FlagSaver so the flag value is restored on every\nexit of the test, following the established pattern in\nbrpc_http_rpc_protocol_unittest.cpp.\n\n* Scope req/res per sub-case in flags_escaping unittest\n\nDeclare FlagsRequest/FlagsResponse inside each { ... } block so no\nstate can leak between the default_method invocations."
    },
    {
      "commit": "e69943bffff7d3ceb9cd0e0d0f81d6c2692ee401",
      "tree": "f289a0cff49f2e98de61bd7fdf8f5fbcba41435a",
      "parents": [
        "5cc723faed9112cab7cf94809c53f59886dfe3d5"
      ],
      "author": {
        "name": "Xiaofeng Wang",
        "email": "wasphin@gmail.com",
        "time": "Mon Sep 14 10:35:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 10:35:34 2026 +0800"
      },
      "message": "Stabilize timer and socket unit tests (#3540)\n\n* Relax timer thread stop latency check\n\nKeep verifying that stop_and_join wakes the timer thread instead of\nwaiting for future tasks, while allowing for CI runner scheduling delays.\n\n* Wait for shutdown write callbacks in socket test\n\nWait for every write callback before failing and releasing the socket.\nStop repeated runs after the first failure and bound the initial wait."
    }
  ],
  "next": "5cc723faed9112cab7cf94809c53f59886dfe3d5"
}
