)]}'
{
  "log": [
    {
      "commit": "566bf95b8fbbcec0cc09fd1cae797acc9d7b8897",
      "tree": "b782c9c17399cf911312ed16b8cc76eb19409913",
      "parents": [
        "edd7cee773ec1d9ed60ca6a4438849f20a67bf35"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Thu Oct 29 19:15:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 29 19:15:32 2026 +0800"
      },
      "message": "fix(store): expose compact raft metric counts (#3433)\n\nAdd a constant-size summary for dashboard collection.\\nKeep detailed registries on the existing endpoint.\\nTest empty, disabled and 1000-group responses and document the contract."
    },
    {
      "commit": "edd7cee773ec1d9ed60ca6a4438849f20a67bf35",
      "tree": "43968d9471270580eeb0024c9c866d8129dd7428",
      "parents": [
        "5ed941be31e6187c44f6356f41f5082fe66395fe"
      ],
      "author": {
        "name": "Ayan Alam",
        "email": "98254953+byteayan@users.noreply.github.com",
        "time": "Wed Oct 28 21:39:46 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 29 00:09:46 2026 +0800"
      },
      "message": "fix(store): size the RocksDB memory budget from available memory (#3355)\n\nBoth shipped application-pd.yml files set rocksdb.total_memory_size: 32000000000, and the pd profile is always included, so the Runtime.maxMemory() fallback in AppConfig.init() never ran. RaftRocksdbOptions splits the value into the WriteBufferManager cache (66%) and the block cache. Both are native LRUCaches, so neither -Xmx nor the container limit bounds them, and a separate 1 GiB raft log cache sits on top. In the run in the issue all three Stores were OOM-killed at a 4 GiB limit once each held about 1 GB of RocksDB data."
    },
    {
      "commit": "5ed941be31e6187c44f6356f41f5082fe66395fe",
      "tree": "a60deb70babc444edaca08cb41bd1fff52d833c9",
      "parents": [
        "881e42c6cad43035bb5484ea4114353852482ffa"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 28 19:53:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 19:53:52 2026 +0800"
      },
      "message": "fix(helm): expose authenticated native HTTP (#3427)\n\nSeaTunnel and Vermeer native HTTP entries remain private in easy mode because their Services and ingress policies are internal-only. This change makes their authenticated HTTP entries inherit NodePort in easy mode and ClusterIP in strict mode, while preserving explicit Service overrides."
    },
    {
      "commit": "881e42c6cad43035bb5484ea4114353852482ffa",
      "tree": "49de3a5de43009949088040a8dcdcccbd48b7cc8",
      "parents": [
        "bc53cd6e4ffedc244af5f3a8a516bb4ecb5daf6c"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 28 19:17:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 19:17:38 2026 +0800"
      },
      "message": "fix(pd): avoid duplicate drain migration submission (#3426)\n\nRemoving an online Store could submit two independent migration commands for the same shard group: capacity-aware planning accepted one destination, then the Exiting-state transition planned the group again."
    },
    {
      "commit": "bc53cd6e4ffedc244af5f3a8a516bb4ecb5daf6c",
      "tree": "077ecbfb30304ab93f48a306b33a23ae77afe342",
      "parents": [
        "97ecd5e2de810364781e4724d18dc07af8cf66bc"
      ],
      "author": {
        "name": "ShryukGrandhi",
        "email": "shryukgrandhi@gmail.com",
        "time": "Wed Oct 28 03:14:36 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 18:14:36 2026 +0800"
      },
      "message": "fix(pd): bound member lookups in RaftEngine.getMembers() (#3409)\n\ngetMembers() waited on each peer\u0027s GetMemberRequest future without a\ntimeout, so an unresponsive peer could stall /v1/members. Use the same\nrpc timeout as getLeaderGrpcAddress(), treat a null response as offline,\nand log the full exception when the bolt call fails.\n\nSigned-off-by: ShryukGrandhi \u003c85529990+ShryukGrandhi@users.noreply.github.com\u003e"
    },
    {
      "commit": "97ecd5e2de810364781e4724d18dc07af8cf66bc",
      "tree": "1769f9fba8cb4aec251d5926908838f2fa97e337",
      "parents": [
        "8d8131a1add0217ace42db49d741548f4fe69772"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 28 17:26:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 17:26:05 2026 +0800"
      },
      "message": "fix(helm): add final newline to Vermeer StatefulSet template (#3425)"
    },
    {
      "commit": "8d8131a1add0217ace42db49d741548f4fe69772",
      "tree": "e0f53776920a42ba041ebb8e381e271d152b2baf",
      "parents": [
        "a9ef6bdbc0a10e8db4008ef037ac322a623bac31"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 28 17:05:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 17:05:37 2026 +0800"
      },
      "message": "fix(hstore): preserve caller context during channel initialization (#3416)\n\nconstruct channel pools on the calling thread, publish only complete pools, and close partial construction on an exception so callers can retry. Permit reads of exactly two required gRPC/DNS properties while retaining set/clear denials and thread restrictions."
    },
    {
      "commit": "a9ef6bdbc0a10e8db4008ef037ac322a623bac31",
      "tree": "ccbc35978ca92e4dd22a248e9abde3e26753a7a6",
      "parents": [
        "28956bfaf790916a9cd63cf9db0e2a9d8fc2c60d"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 28 16:35:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 16:35:33 2026 +0800"
      },
      "message": "feat(helm): integrate optional Vermeer with Hubble (#3422)\n\nadd opt-in standalone/cluster Vermeer wiring, automatic Hubble credentials and role-specific storage/network policies. Keep Vermeer and SeaTunnel disabled by default, share the Server/Store metadata namespace, and document recovery and upgrade boundaries."
    },
    {
      "commit": "28956bfaf790916a9cd63cf9db0e2a9d8fc2c60d",
      "tree": "fd6fa0ce6e18f2e18588c723707ab92a17ba187a",
      "parents": [
        "a47478d75b69bf93c33f9ed253793a731fc21e97"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 28 16:14:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 16:14:40 2026 +0800"
      },
      "message": "docs: remove temporary development notes (#3423)"
    },
    {
      "commit": "a47478d75b69bf93c33f9ed253793a731fc21e97",
      "tree": "10e5962f2de7697a5547f3bb64936307a45e2e7e",
      "parents": [
        "33f742217c65516bbab411bf75211e03c5e696dd"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 28 16:10:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 16:10:06 2026 +0800"
      },
      "message": "fix(store): refresh recovery shard metadata (#3417)\n\nvalidate PD membership and persisted graph partitions, then refresh derived metadata once per group only when its engine is absent. Preserve running engines and durable Raft configuration; missing, invalid, or unavailable PD metadata blocks recovery and retains local data."
    },
    {
      "commit": "33f742217c65516bbab411bf75211e03c5e696dd",
      "tree": "a936531f5662abbb19e77b9ca1572aa1e13a4e02",
      "parents": [
        "23b0191b422ef9efd0e73aa733512db4516fec20"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 28 16:08:53 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 16:08:53 2026 +0800"
      },
      "message": "fix(store): honor configured raft segment size (#3420)\n\n pass the resolved segment size to log storage, retaining the effective 1 GiB default and legacy system-property fallback. Explicit Store configuration takes precedence. Document existing-file recovery, sparse files, and the encoded-entry size constraint."
    },
    {
      "commit": "23b0191b422ef9efd0e73aa733512db4516fec20",
      "tree": "4dec4abf449b2002442fe2be99da9757cd8a9a6d",
      "parents": [
        "a185f1d348c5fddd7bc6feefa5cbf980f6a86987"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 28 16:07:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 16:07:34 2026 +0800"
      },
      "message": "fix(pd): preserve store drain state (#3418)\n\nseparate draining liveness from placement eligibility, renew the drain lease, and require zero local engines plus no PD shard references before retirement. Serialize heartbeat/registration with state changes and preserve Exiting on re-registration."
    },
    {
      "commit": "a185f1d348c5fddd7bc6feefa5cbf980f6a86987",
      "tree": "cb278529716e65654987331c5098ce6fb17c2ae4",
      "parents": [
        "96ce802a25672f8b7b0d08c49e68db694231f5e4"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 28 14:04:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 14:04:01 2026 +0800"
      },
      "message": "fix(store): resume learner promotion on retry (#3419)"
    },
    {
      "commit": "96ce802a25672f8b7b0d08c49e68db694231f5e4",
      "tree": "c74530b7ff6e7f55bd85c897794642347084152f",
      "parents": [
        "9a8f066e66cd075e502c2378632dddff1c094a38"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 28 02:22:23 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 28 02:22:23 2026 +0800"
      },
      "message": "feat(helm): integrate native SeaTunnel hybrid deployment (#3402)\n\nUse one native hybrid StatefulSet: one member for standalone use, multiple members for a cluster. Add DNS discovery, Secret-backed configuration, a task UI, and a schema-first vertex/edge copy example without requiring an operator."
    },
    {
      "commit": "9a8f066e66cd075e502c2378632dddff1c094a38",
      "tree": "2b0a0f7ef5755a4cdddd97bb4f79adecdc6356e0",
      "parents": [
        "f04d5cc8fc2fbd849d6aeef3f111e717a1f8f90d"
      ],
      "author": {
        "name": "Vaidik Garg",
        "email": "vaidik2008garg@gmail.com",
        "time": "Tue Oct 27 10:20:52 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 27 12:50:52 2026 +0800"
      },
      "message": "test(store): cover the id-only projection through QueryUtil.buildPlan (#3410)\n\nThe existing tests drive ProjectionStage by hand, so they would miss a\nchange in how buildPlan wires the projection for a null_property request.\nThe new case checks that buildPlan returns a projection-only plan for that\nrequest, feeds MapLimitIterator output through it, and checks each key\ncomes out once with an empty value. It fails with \"key 0 emitted twice\"\nwhen the ProjectionStage fix from #3408 is reverted."
    },
    {
      "commit": "f04d5cc8fc2fbd849d6aeef3f111e717a1f8f90d",
      "tree": "39316afc8b82cde307a341c29ee580594e69a327",
      "parents": [
        "e497efd99fb2e98a5bb2603c56db0ba27aeb671a"
      ],
      "author": {
        "name": "Ayan Alam",
        "email": "98254953+byteayan@users.noreply.github.com",
        "time": "Mon Oct 26 19:04:52 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 21:34:52 2026 +0800"
      },
      "message": "fix(pd): wait for a held metadata RocksDB lock at startup (#3379)\n\nA restarted PD can start before the previous PD JVM has released the metadata RocksDB LOCK (systemd restart, stop then start). Since #3368 a failed metadata open fails startup instead of leaving a half-started PD, but it fails immediately, so this restart race still needs an operator. #3368 left the retry as a TODO pointing at #3226."
    },
    {
      "commit": "e497efd99fb2e98a5bb2603c56db0ba27aeb671a",
      "tree": "c19fb4926ccd3b21c7f8e454d3900553360f6f5f",
      "parents": [
        "608cb1db92e2023762377da235744944e00d1c0b"
      ],
      "author": {
        "name": "Vaidik Garg",
        "email": "vaidik2008garg@gmail.com",
        "time": "Mon Oct 26 15:48:03 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 18:18:03 2026 +0800"
      },
      "message": "fix(store): stop ProjectionStage clearing dedup keys in place (#3408)\n\nMapLimitIterator keeps each emitted RocksDBSession.BackendColumn as a key\nin its dedup set and passes the same object downstream. On an id-only scan\nwith every property removed, ProjectionStage then set column.value to an\nempty array in place, so the stored key no longer equalled a later\nbyte-equal row and the copy was emitted again: 200 rows for 100 keys read\ntwice.\n\n- replace the projected column instead of clearing value on the shared object\n- keep the dedup key MapLimitIterator holds unchanged\n- cover both with ProjectionStageTest in ServerSuiteTest\n\nFixes #3407"
    },
    {
      "commit": "608cb1db92e2023762377da235744944e00d1c0b",
      "tree": "3fcd05118ea0abeeb55e968a4950daaa7b3abcb4",
      "parents": [
        "8ca41e2fc14d9750f835533b5bc7592415d4aa11"
      ],
      "author": {
        "name": "Ayan Alam",
        "email": "98254953+byteayan@users.noreply.github.com",
        "time": "Sun Oct 25 21:30:59 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 26 00:00:59 2026 +0800"
      },
      "message": "feat(docker): run all images as a non-root user (#3381)\n\nThe hugegraph/pd, hugegraph/store, hugegraph/server and hugegraph/hugegraph images run Java as root. A namespace under the restricted Pod Security Standard rejects them, the Helm chart cannot default to non-root, and scanners flag every workload.\n\nUpgrade required: existing Docker volumes written by the old root images need a one-time chown, and existing Helm releases upgraded with --reuse-values need fsGroup set explicitly. Both are documented below and should go into the release notes."
    },
    {
      "commit": "8ca41e2fc14d9750f835533b5bc7592415d4aa11",
      "tree": "e4448a01ff42d94eabddbb77046bc8fa67e56939",
      "parents": [
        "fdb80c87b5642c0953379e5f986b871e841711e8"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Sun Oct 25 17:41:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 17:41:49 2026 +0800"
      },
      "message": "feat(pd): clean deleted graph-space statistics (#3403)\n\nUpgrade every PD node before using the new cleanup RPC. Cleanup does not restore already-deleted graphs, purge historical orphans, or make cross-replica create/delete atomic. Focused lifecycle and concurrency tests are author-reported; production-replica behavior remains unverified."
    },
    {
      "commit": "fdb80c87b5642c0953379e5f986b871e841711e8",
      "tree": "f494e91734902fbfee68bf76215cb3f6e12b8e44",
      "parents": [
        "a8fac1bc88a67d6cf85ca40c9885d7daadaaa0f0"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Sun Oct 25 16:09:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 16:09:38 2026 +0800"
      },
      "message": "refactor: simplify Java 17 control flow (#3406)\n\n- bind checked values with pattern variables\n- simplify value dispatch with switch expressions\n- preserve null, exception and encoding behavior\n- retain Commons compatibility and generated code"
    },
    {
      "commit": "a8fac1bc88a67d6cf85ca40c9885d7daadaaa0f0",
      "tree": "abc48eeeb46d8994e46820104acc9b2271a7ef4c",
      "parents": [
        "6e71d9e81434ac0792b2b541c49f067fb30888b0"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Sun Oct 25 15:39:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 15:39:10 2026 +0800"
      },
      "message": "fix(store): retain repeated union groups (#3405)\n\n- emit one row for each sorted union group\n- preserve pending values across iterator probes\n- cover map flushes, repeated groups and EOF"
    },
    {
      "commit": "6e71d9e81434ac0792b2b541c49f067fb30888b0",
      "tree": "29a6aba0b4b226dab14ed37ba4ef4715aab597cb",
      "parents": [
        "969bb14202916af61267aa51d73d32c89627a5ed"
      ],
      "author": {
        "name": "Vaidik Garg",
        "email": "vaidik2008garg@gmail.com",
        "time": "Sun Oct 25 13:08:02 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 25 15:38:02 2026 +0800"
      },
      "message": "fix(store): hash BackendColumn by its name and value (#3404)\n\nRocksDBSession.BackendColumn overrode equals() to compare name and value\nbytes but kept Object.hashCode(). A RocksDB scan allocates a new column for\nevery row, so the hash-based iterators in hg-store-core never matched\nbyte-equal rows that came from separate objects:\n\n- IntersectionFilterIterator (size 2) returned 0 rows for 100 keys read twice\n- UnionFilterIterator below its sort threshold returned 200 instead of 100\n- MapLimitIterator\u0027s dedup set kept every copy\n\nhashCode() now combines Arrays.hashCode() of the same two arrays equals()\ncompares, and new tests in hg-store-test build a fresh column per row.\n\nFixes #3396"
    },
    {
      "commit": "969bb14202916af61267aa51d73d32c89627a5ed",
      "tree": "eb03a759ba852ec27fa58bbf8f4628751068b2d7",
      "parents": [
        "75ea5c7dcf5beb4833767d93975d9c28985854fb"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Sat Oct 24 10:06:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 24 10:06:12 2026 +0800"
      },
      "message": "fix(pd): configure quota metadata namespace (#3400)"
    },
    {
      "commit": "75ea5c7dcf5beb4833767d93975d9c28985854fb",
      "tree": "ee51f415b0f217536ab9df8742aeb05badd6a8d5",
      "parents": [
        "8338402826e5f9d05ed6b87784fe334659e381c8"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Sat Oct 24 00:47:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 24 00:47:35 2026 +0800"
      },
      "message": "fix(server): refresh graph-space quotas (#3398)\n\nSubscribe to existing graph-space ADD and UPDATE metadata events.\n\nReuse guarded metadata reads to avoid retaining stale peer quotas.\n\nCover peer refresh and delayed events and document asynchronous scope."
    },
    {
      "commit": "8338402826e5f9d05ed6b87784fe334659e381c8",
      "tree": "3664640d7e2101ed7d288a021305ef100750265e",
      "parents": [
        "f323860ea3495ccfe943e113bdf4ddd2e1659ea1"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Fri Oct 23 13:28:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 13:28:09 2026 +0800"
      },
      "message": "fix: preserve traversal and PD client contracts (#3395)\n\nAlgorithm results and filtered queries can lose data or leave scans open. PD lock initialization and leader discovery can use the wrong failure or routing path, and one failing watch listener can stop notifications for every listener. This cleanup preserves API signatures, configuration, retry budgets and stored formats."
    },
    {
      "commit": "f323860ea3495ccfe943e113bdf4ddd2e1659ea1",
      "tree": "ccad49d922a0f8ae752998d2dc9d200dcf1e2116",
      "parents": [
        "1216e914e6365ec8ed332de5369fd97da3fc18b5"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Fri Oct 23 04:40:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 04:40:04 2026 +0800"
      },
      "message": "refactor: preserve task and query failure causes (#3394)\n\n- fail interrupted submissions and allocate unique job IDs\n- report exhausted PD calls with their original causes\n- propagate sort failures and close conversion iterators\n- cover retry and cleanup contracts with regression tests"
    },
    {
      "commit": "1216e914e6365ec8ed332de5369fd97da3fc18b5",
      "tree": "0bec10581f83438ded61d67b852d4441d368fa1a",
      "parents": [
        "eb6e66f313a378114426eb7999b8475447d15d15"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Fri Oct 23 04:21:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 04:21:04 2026 +0800"
      },
      "message": "refactor: harden worker and shuffle lifecycles (#3393)\n\n- reuse algorithm consumers and retain worker failures\n- preserve interrupts and sync complete snapshot archives\n- close shuffle readers and reject truncated records\n- use JDK APIs and cover lifecycle regressions"
    },
    {
      "commit": "eb6e66f313a378114426eb7999b8475447d15d15",
      "tree": "c5266c205e4d7f3750970ea8289ec8d915d4e3f0",
      "parents": [
        "2d22bf89bf50833799fd764b621c951af6544093"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Fri Oct 23 02:13:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 23 02:13:36 2026 +0800"
      },
      "message": "refactor: correct graph-space usage, quotas and removal (#3391)\n\nGraph-space cards can remain at zero after writes, newly bootstrapped DEFAULT spaces use effectively unlimited quotas, and peer Servers retain deleted spaces in their local caches."
    },
    {
      "commit": "2d22bf89bf50833799fd764b621c951af6544093",
      "tree": "ab5d9cb95eb33d850ba04b29681d8458f665e594",
      "parents": [
        "42d358a1b77fc14ec99892f4f5c841acb72d27ee"
      ],
      "author": {
        "name": "Rabari Mihir",
        "email": "mihirrabari2604@gmail.com",
        "time": "Thu Oct 22 19:51:45 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 22:21:45 2026 +0800"
      },
      "message": "fix(pd): keep RaftEngineReadIndexTest stubs clear of the alive-peers refresher (#3385)\n\nFixes #3384\n\n---------\n\nCo-authored-by: Rabari Mihir \u003c169349389+Mihir-Rabari@users.noreply.github.com\u003e\nCo-authored-by: imbajin \u003cjin@apache.org\u003e"
    },
    {
      "commit": "42d358a1b77fc14ec99892f4f5c841acb72d27ee",
      "tree": "1bf810407db0c6bc943fc694ec6ef15c57b7622b",
      "parents": [
        "b43b011d6c48b57d93ae4aa212a435144b64266d"
      ],
      "author": {
        "name": "Ayan Alam",
        "email": "98254953+byteayan@users.noreply.github.com",
        "time": "Thu Oct 22 19:50:39 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 22:20:39 2026 +0800"
      },
      "message": "refactor(pd): make the RaftEngine constructor private (#3380)\n\nRaftEngine is a singleton reached through getInstance(). Tests that need\na private engine build it reflectively, as PDNativeOwnerTest already does.\n\nFixes #2655"
    },
    {
      "commit": "b43b011d6c48b57d93ae4aa212a435144b64266d",
      "tree": "9cbb99299ff80228ed5dcab025806ae0af27a41e",
      "parents": [
        "54bee93de3a4fdf2d91b4e8cc2054fcb7d02eefb"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Thu Oct 22 21:28:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 21:28:02 2026 +0800"
      },
      "message": "refactor(ci): submit matching master dependency baselines (#3326)\n\nProvide matching master dependency snapshots so PR dependency review can compare resolved Maven dependencies against a real baseline. Reduce the extra CI queue pressure by sharing existing runners and reactor builds."
    },
    {
      "commit": "54bee93de3a4fdf2d91b4e8cc2054fcb7d02eefb",
      "tree": "45563070860e0ae08010f694d62e0db9350837cd",
      "parents": [
        "1a2d07c991faa6f41f93a49d59d4b43b8ef52940"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Thu Oct 22 21:21:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 21:21:49 2026 +0800"
      },
      "message": "perf(struct): grow serialization buffers geometrically (#3390)"
    },
    {
      "commit": "1a2d07c991faa6f41f93a49d59d4b43b8ef52940",
      "tree": "8a945eb72f0b3db0256d7bce7f63f2f204697595",
      "parents": [
        "ebb8f4e17f0bf826cb50745c590d8bc54b45c6b6"
      ],
      "author": {
        "name": "Rabari Mihir",
        "email": "mihirrabari2604@gmail.com",
        "time": "Thu Oct 22 16:34:53 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 19:04:53 2026 +0800"
      },
      "message": "fix(pd): register only raft replication processors on the PD raft rpc server (#3387)\n\nRaftRpcServerFactory.createRaftRpcServer registers jraft\u0027s CLI\nmembership processors on the PD raft port next to the replication\nones, so a CliService client that reaches the port can add, remove\nor reset peers and learners or transfer the leadership without the\nchecks of RaftEngine#changePeerList and PDService#updatePdRaft.\n\nCreate the rpc server via RpcFactoryHelper and register only the\nreplication processors. Keep calling ProtobufMsgFactory.load() so\nthe protobuf codecs for raft messages stay registered, which the\nfactory\u0027s static block did as a side effect.\n\nCo-authored-by: Rabari Mihir \u003c169349389+Mihir-Rabari@users.noreply.github.com\u003e"
    },
    {
      "commit": "ebb8f4e17f0bf826cb50745c590d8bc54b45c6b6",
      "tree": "b5f0d51323dfda7d03b1d9af324b6fe11c2f677a",
      "parents": [
        "86c05ef9c5d417bd37eab21d4ecd5af82bab17ef"
      ],
      "author": {
        "name": "Pallavi Jain",
        "email": "jainpallavi.delhi@gmail.com",
        "time": "Wed Oct 21 10:16:44 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 21 12:46:44 2026 +0800"
      },
      "message": "fix(dist): diagnose jvm thread creation failures during startup (#3360)"
    },
    {
      "commit": "86c05ef9c5d417bd37eab21d4ecd5af82bab17ef",
      "tree": "aa0404f9122d01bded13f86c154500421923aa1c",
      "parents": [
        "71c03fe74ba20c71e48156bbffb87a5f7d8ee413"
      ],
      "author": {
        "name": "contrueCT",
        "email": "contrue_CT@outlook.com",
        "time": "Tue Oct 20 03:14:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 03:14:54 2026 +0800"
      },
      "message": "fix(server): reject incomplete cross-label index coverage (#3243)\n\nGlobal property queries can silently omit records from labels without compatible indexes. For type-compatible values, this change requires complete coverage for every query-visible candidate label and raises NoIndexException for partial coverage. Adding hasLabel(...) or compatible indexes on all candidates provides an explicit remedy."
    },
    {
      "commit": "71c03fe74ba20c71e48156bbffb87a5f7d8ee413",
      "tree": "2ebfe289ae739ae5d2d3cfc8e1129cd618d18351",
      "parents": [
        "fd1159382c94a6ef860092f95ded9132e10b2796"
      ],
      "author": {
        "name": "Arshil",
        "email": "arshilkxwork@gmail.com",
        "time": "Tue Oct 20 00:18:33 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 02:48:33 2026 +0800"
      },
      "message": "fix(hstore): register the graph with PD again after clear (#3374)\n\nclear() deletes the graph from the Store and from PD, but kept it in\ninfoInitializedGraph, and only open() registered a graph. When a running\ngraph is cleared and initialized again, its store sessions stay open, so\nHstoreStore.open() returns early and init() created tables for a graph\nPD no longer had.\n\nMove the registration into registerGraph(), call it from open() and from\ncreateTable(), which init() uses, and have clear() forget the\nregistration in a finally block.\n\nPart of #3090"
    },
    {
      "commit": "fd1159382c94a6ef860092f95ded9132e10b2796",
      "tree": "a5e401ea4fdf35ce5b8ae7ed99628b783e255903",
      "parents": [
        "f687e2b336f7c67adac298532c8188816a250170"
      ],
      "author": {
        "name": "Pallavi Jain",
        "email": "jainpallavi.delhi@gmail.com",
        "time": "Mon Oct 19 23:47:20 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 02:17:20 2026 +0800"
      },
      "message": "fix(pd): report fatal raft errors through health probes (#3358)\n\nRoot cause: RaftStateMachine.onLeaderStop() replaced a terminal error with follower state, allowing /v1/health to report success after an unrecoverable Raft failure. Queued leader/follower callbacks could also overwrite terminal state.\n\n---------\n\nCo-authored-by: imbajin \u003cjin@apache.org\u003e"
    },
    {
      "commit": "f687e2b336f7c67adac298532c8188816a250170",
      "tree": "0ad56db70743bee7e9b0e13ae4dea5df6c4ca360",
      "parents": [
        "fd8d06c519e2481be89c6f7bc7a45b321b773d12"
      ],
      "author": {
        "name": "Rabari Mihir",
        "email": "mihirrabari2604@gmail.com",
        "time": "Mon Oct 19 23:46:34 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 20 02:16:34 2026 +0800"
      },
      "message": "fix(server): fold cypher temp-construct into bound date values (#3370)\n\nThe Cypher endpoint rejects the standard date() constructor with\nUnknown function \u0027date\u0027 because the cypher-for-gremlin translator ships a\nfixed function list that contains no temporal functions. That list lives\ninside the translator dependency, so there is no way to register new\nfunctions from HugeGraph; instead I fold the temporal constructors on the\nHugeGraph side. Right before translation, date(), datetime() and\nlocaldatetime() calls with a foldable argument (no argument, a string\nliteral, or a parameter bound to a string) are rewritten into a synthetic\nbound parameter carrying a java.util.Date, the value HugeGraph already\nuses for DATE properties.\n\n---------\n\nSigned-off-by: Rabari Mihir \u003c169349389+Mihir-Rabari@users.noreply.github.com\u003e\nCo-authored-by: imbajin \u003cjin@apache.org\u003e"
    },
    {
      "commit": "fd8d06c519e2481be89c6f7bc7a45b321b773d12",
      "tree": "a6b6471ec000ecc600b584d9d4bd6c3770f46e6e",
      "parents": [
        "c2ec5704332fc1102ad277d6aae6658d65c73601"
      ],
      "author": {
        "name": "KAI",
        "email": "himnshuverma10152006@gmail.com",
        "time": "Mon Oct 19 13:13:59 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 15:43:59 2026 +0800"
      },
      "message": "refactor(pd): make PD reads and elections safe (#3368)\n\nThe schema sync design asks for PD\u0027s consistent read, or the read barrier it needs, before the notify and ACK protocol is built on it (section 5.1). PD has no such barrier on master: get and scanPrefix read the local RocksDB with only an isLeader() check, and id allocation reads its counter the same way. This PR adds the barrier to id allocation and fixes two PD raft bugs found while checking that path. It does not depend on the schema sync work and is useful on its own.\n\n---------\n\nCo-authored-by: imbajin \u003cjin@apache.org\u003e"
    },
    {
      "commit": "c2ec5704332fc1102ad277d6aae6658d65c73601",
      "tree": "9892298c67aa63077504ffd2d2967b733aad812f",
      "parents": [
        "90790e867b6bda54536ac9103ae3876d02b08648"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Sun Oct 18 21:37:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 21:37:39 2026 +0800"
      },
      "message": "docs: fix DeepWiki badge (#3373)\n\n- replace the challenged badge endpoint with Shields\n- preserve the DeepWiki label and repository link\n- verify the replacement serves a valid SVG"
    },
    {
      "commit": "90790e867b6bda54536ac9103ae3876d02b08648",
      "tree": "cc79e68882c1059081c61f61af12119b8748648e",
      "parents": [
        "d505f6f02503d36ff4f6735686cede3500640a51"
      ],
      "author": {
        "name": "KAI",
        "email": "himnshuverma10152006@gmail.com",
        "time": "Sun Oct 18 03:22:18 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 05:52:18 2026 +0800"
      },
      "message": "fix(server): keep schema ids and graphs safe on truncate and auth clear (#3369)"
    },
    {
      "commit": "d505f6f02503d36ff4f6735686cede3500640a51",
      "tree": "1195ed4d18e6bcec1f64d656cce2e4ae8c8b8106",
      "parents": [
        "db85924eca238236d79f783bd05b41fbc49aa7e4"
      ],
      "author": {
        "name": "Soyaazz",
        "email": "523420504@qq.com",
        "time": "Sun Oct 18 04:42:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 04:42:01 2026 +0800"
      },
      "message": "refactor: improve activation and local diagnosis tool (#2945)\n\nArthas could previously be activated through unprotected HTTP endpoints, with diagnostic ports bound to 0.0.0.0. Server now requires configured authentication and an authenticated administrator for PUT /arthas; Store\u0027s unauthenticated /v1/arthasstart returns HTTP 403."
    },
    {
      "commit": "db85924eca238236d79f783bd05b41fbc49aa7e4",
      "tree": "c5ba78bd890259881d1dabb20e66ad9500f69a17",
      "parents": [
        "f5d9885a575f1b9250e5174afc473303454cd579"
      ],
      "author": {
        "name": "KAI",
        "email": "himnshuverma10152006@gmail.com",
        "time": "Sun Oct 18 01:56:35 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 04:26:35 2026 +0800"
      },
      "message": "fix(ci): append the start-server config lines only once (#3371)"
    },
    {
      "commit": "f5d9885a575f1b9250e5174afc473303454cd579",
      "tree": "081ba464ef3a2277050eded90d91f7ec1a299682",
      "parents": [
        "8fe10180d39b3acaf5973de735c22f85cfe29c97"
      ],
      "author": {
        "name": "Rabari Mihir",
        "email": "mihirrabari2604@gmail.com",
        "time": "Sat Oct 17 15:38:51 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 18:08:51 2026 +0800"
      },
      "message": "test(api): cover ORDER BY on a nullable boolean grouping key (#3367)\n\nGrouping by a nullable boolean property produces rows whose key is\ntrue, false or the translator null marker, and ordering such rows once\nfailed with a ClassCastException on TinkerPop 3.5.x because the marker\ncompares as a string. With the TinkerPop versions built against now the\nsame query orders all three keys with Cypher null semantics (null first\ndescending, last ascending). Add an api-test that runs the issue\u0027s\nquery shape through the Cypher endpoint in both directions.\n\nCo-authored-by: Rabari Mihir \u003c169349389+Mihir-Rabari@users.noreply.github.com\u003e"
    },
    {
      "commit": "8fe10180d39b3acaf5973de735c22f85cfe29c97",
      "tree": "9290693433d18f8941915737192e9d952bce152e",
      "parents": [
        "6b403c6419a28888989ca68468dad9b8dedea26f"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Sat Oct 17 14:09:38 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 14:09:38 2026 +0800"
      },
      "message": "fix(api): allow anonymous cypher queries (#3366)\n\nWith Server authentication disabled, both Cypher GET and POST requests still returned 401 unless an Authorization header was supplied. This also prevented Hubble from executing Cypher in anonymous mode. Cypher now follows the Server authentication switch and connects to Gremlin without credentials when authentication is disabled."
    },
    {
      "commit": "6b403c6419a28888989ca68468dad9b8dedea26f",
      "tree": "1f5dcd47eb8ebe2ec6e815f5bb33f13667000fcc",
      "parents": [
        "764dd73a4474ecdc1fb9c9bb21357d50142acfee"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Sat Oct 17 11:07:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 11:07:34 2026 +0800"
      },
      "message": "chore(helm): add official chart icon (#3365)\n\n- set the chart icon to the HugeGraph logo\n- reuse the SVG served by the project website\n- display project branding in chart catalogs"
    },
    {
      "commit": "764dd73a4474ecdc1fb9c9bb21357d50142acfee",
      "tree": "20f8ce14735907a37f9abbc400323b55240a65b6",
      "parents": [
        "f0bc073e3a642d9fd0beaa690b539ed9a5eca284"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Sat Oct 17 01:36:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 01:36:55 2026 +0800"
      },
      "message": "docs(helm): align chart installation guides (#3363)\n\nThe website now uses --devel for Helm trials, while the repository still requires an explicit version and shows a placeholder development build. Align the repository guides with the merged website update."
    },
    {
      "commit": "f0bc073e3a642d9fd0beaa690b539ed9a5eca284",
      "tree": "d226d55fccbfd88799c989add8db53ce1a72d23e",
      "parents": [
        "6f98193eac966421e499f5d506d86b22094b52cd"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Sat Oct 17 01:11:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 17 01:11:34 2026 +0800"
      },
      "message": "chore(rpc): cover last service unexport (#3364)\n\nVerify the remaining service after the first unexport.\nWait for listener closure after removing the last service.\nReuse the existing fixture without production changes."
    },
    {
      "commit": "6f98193eac966421e499f5d506d86b22094b52cd",
      "tree": "d1fda9fb9755af8d5a92d9a39ad2a27d58f6ea1f",
      "parents": [
        "9180d2173ff81e615c8d068cca21653cda93fa03"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Fri Oct 16 22:05:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 22:05:52 2026 +0800"
      },
      "message": "refactor(server): coordinate graph rpc lifecycle (#3329)\n\nGraphs added after startup could miss cache RPC registration. Cleanup failures could retain stale owners, and a same-name ADD could be discarded while an older owner was still healthy or closing. Graphs now become visible after RPC registration, unfinished cleanup remains retryable, and received ADDs reload current metadata after the old owner is released."
    },
    {
      "commit": "9180d2173ff81e615c8d068cca21653cda93fa03",
      "tree": "a44817f5b586616fbd76701d1c8d4a48f6f2611c",
      "parents": [
        "be68aa240411039d611c734d03c217a52bd6b405"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Fri Oct 16 22:05:35 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 22:05:35 2026 +0800"
      },
      "message": "refactor(helm): add OCI distribution metadata (#3361)\n\n- rename the chart artifact to hugegraph-helm\n- preserve Kubernetes application names and selectors\n- document versioned OCI pulls and offline mirroring\n- verify package metadata and update chart label fixtures"
    },
    {
      "commit": "be68aa240411039d611c734d03c217a52bd6b405",
      "tree": "28e4ae3781edae91c475cec6c61ae03122643586",
      "parents": [
        "efbf211800f4533c9ddcd3439b14bb9edb71df45"
      ],
      "author": {
        "name": "ayanx",
        "email": "98254953+byteayan@users.noreply.github.com",
        "time": "Fri Oct 16 13:19:05 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 15:49:05 2026 +0800"
      },
      "message": "fix(server): bind locally loaded graphs in Gremlin Server (#3351)\n\nGremlin Server opens the graphs in conf/graphs itself, once, inside HugeGremlinServer.prepare(). TinkerPop\u0027s DefaultGraphManager logs and drops any graph whose open throws. That open runs before the REST GraphManager exists, so it also runs before the pd.stores_wait_timeout wait. When PD is briefly unreachable at that point, the Gremlin open fails. A few seconds later REST opens the same graph successfully, after its wait. GraphManager.loadGraph(String, String) then stored the graph without firing GRAPH_CREATE, which is the only way ContextGremlinServer binds a graph after startup. The Server answered REST and passed readiness, and every Gremlin call on that graph failed with Could not rebind [DEFAULT-hugegraph] until the process restarted."
    },
    {
      "commit": "efbf211800f4533c9ddcd3439b14bb9edb71df45",
      "tree": "8f4f9179b2aaf4b9514b24a389407c5b893d7d04",
      "parents": [
        "a4da5d1f0d813a427cb80f9671d040557362eaa0"
      ],
      "author": {
        "name": "ayanx",
        "email": "98254953+byteayan@users.noreply.github.com",
        "time": "Fri Oct 16 13:17:08 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 15:47:08 2026 +0800"
      },
      "message": "feat(docker): map server.urls_to_pd and server.deploy_in_k8s from env (#3352)\n\nThe Server entrypoint maps a set of HG_SERVER_* variables onto the conf files, but nothing mapped the two keys that decide which address a Server registers in PD: server.urls_to_pd and server.deploy_in_k8s. GraphManager registers the urls_to_pd list only when deploy_in_k8s is true, and restserver.url otherwise. Without a mapping, the Helm chart rewrites rest-server.properties in a shell wrapper before it runs the entrypoint, and the TODO in docker-entrypoint.sh asked for these mappings."
    },
    {
      "commit": "a4da5d1f0d813a427cb80f9671d040557362eaa0",
      "tree": "bb9103d3ddebb862190878ec25279677f2d4acbe",
      "parents": [
        "030396e5e895d85689684306d4021c762c5ec593"
      ],
      "author": {
        "name": "Arshil",
        "email": "arshilkxwork@gmail.com",
        "time": "Fri Oct 16 13:09:15 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 15:39:15 2026 +0800"
      },
      "message": "refactor(pd): export per-store state and leader count gauges (#3357)\n\nPD keeps every store\u0027s state and every shard group\u0027s leader in its metadata, but its Prometheus endpoint only exports how many stores exist. While a rebuilt Store recovers, an operator has to read logs or poll /v1/stores and /v1/shardGroups to see whether it is back Up and whether leaders have moved back to it. Because PD serves these gauges, they stay readable while the recovering Store cannot serve its own endpoint."
    },
    {
      "commit": "030396e5e895d85689684306d4021c762c5ec593",
      "tree": "286a96181bd4e0db3aab4fc500686d531ed4c353",
      "parents": [
        "4e569a42350dfaff167885fcc3730902a55160cd"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Fri Oct 16 10:32:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 10:32:03 2026 +0800"
      },
      "message": "fix(helm): detect invalid indexes per server pod (#3349)\n\nhelm test can pass every Server while one Pod retains an unready index state and indexed queries fail. The hook previously checked only graph binding and a simple scan. It now checks visible linked index state on every Pod, with optional explicit business-query assertions."
    },
    {
      "commit": "4e569a42350dfaff167885fcc3730902a55160cd",
      "tree": "c21fd65667695fc12999c628d5300ad5a6a1ff46",
      "parents": [
        "0a3d0ab9b3ff7c3302b6bac046fe246232d9e1df"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Fri Oct 16 10:31:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 10:31:41 2026 +0800"
      },
      "message": "fix(server): allow V2 schema async tasks (#3350)\n\nHStore Gremlin schema requests can return 403 when a V2 schema task needs a new worker thread. The existing async-task permission mapping covers V1 but omits V2."
    },
    {
      "commit": "0a3d0ab9b3ff7c3302b6bac046fe246232d9e1df",
      "tree": "476212ca5727ffde1f1ae91ee47b547eb95854b1",
      "parents": [
        "a0aae8e7e58743bfe3d6c10e7cbab9b0f885376f"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Fri Oct 16 10:30:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 10:30:14 2026 +0800"
      },
      "message": "feat(server): coordinate loading owners (#3331)\n\nWhen concurrent Loaders finish independently, one can restore NONE while another still imports. Keep LOADING until the last owner releases it on the same live graph instance, and provide controlled recovery when an import loses its handle."
    },
    {
      "commit": "a0aae8e7e58743bfe3d6c10e7cbab9b0f885376f",
      "tree": "4d92fd12d2fc2e698752d2e261fc1bfa5821f83c",
      "parents": [
        "9adfaf295eb7f00ae5c2c848d8862b59b06756cc"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Fri Oct 16 00:59:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 00:59:54 2026 +0800"
      },
      "message": "fix(server): preserve legacy cypher errors resp (#3259)\n\nHG-19 follow-up to #3241, within #3242. Keep the response envelope compatible with existing Java clients and classify actual Cypher translator failures correctly. Semantic parser errors previously fell through to execution or unsupported-feature errors, while backend unsupported predicates could be mistaken for translator limitations.\n\nThis PR retains Nguyen Quang Minh\u0027s structured-error work and authorship from #3241. Its response metadata lives in status.attributes.errors, preserving the existing top-level fields, status and message.\n\nExecutionError may also cover unrecognized translation failures and does not imply traversal execution started; original messages are preserved and classification does not cover every translator failure."
    },
    {
      "commit": "9adfaf295eb7f00ae5c2c848d8862b59b06756cc",
      "tree": "92a5685c277b8e9bbae771e73499ce6c41bf13a2",
      "parents": [
        "574badbd6877e53a23b91a59879535713eee90a0"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Fri Oct 16 00:42:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 00:42:09 2026 +0800"
      },
      "message": "fix(store): serialize scan stream requests (#3354)\n\n- serialize request sends and terminal observer calls\n- suppress requests and repeated terminals after completion\n- preserve final pages, original errors and channel retirement\n- cover completion and cancellation during in-flight sends"
    },
    {
      "commit": "574badbd6877e53a23b91a59879535713eee90a0",
      "tree": "b654fa6b39ee55a09813eff0a4928aaf728eb0bf",
      "parents": [
        "d90946df10222baaf4658dc3fa135850a11a8a8f"
      ],
      "author": {
        "name": "Arshil",
        "email": "arshilkxwork@gmail.com",
        "time": "Thu Oct 15 22:08:04 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 00:38:04 2026 +0800"
      },
      "message": "fix(server): stop duplicating /metrics families and quote statistics labels (#3348)\n\n/metrics/statistics wrote label values without quotes, for example\ngraphs_hugegraph_graph_vertices_GET{name\u003dMAX_RESPONSE_TIME,} 12, and\nPrometheus fails the whole scrape on the first such line (\"expected\nlabel value\").\n\n/metrics wrote every gauge, histogram, meter and timer twice once the\nServerReporter had run its first 60s report: once from the reporter\u0027s\nsnapshot and once from MetricsUtil.writePrometheusFormat(), which both\nread MetricManager\u0027s registry. Strict parsers such as promtool reject\nthe second TYPE line, and Prometheus logs the repeats as duplicate\nsamples.\n\nRemove the snapshot pass so /metrics reads the live registry once,\nwhich matches what it already returned before the first report. Move\nthe statistics writer to MetricsUtil.writeStatisticsPrometheusFormat()\nand quote the label value.\n\nPart of #2354."
    },
    {
      "commit": "d90946df10222baaf4658dc3fa135850a11a8a8f",
      "tree": "a68449640875127d21113ac89192b66312dcf9f1",
      "parents": [
        "e130233c7575aa159f859f1e783a6fd6c98f93ae"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Fri Oct 16 00:32:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Oct 16 00:32:06 2026 +0800"
      },
      "message": "refactor(docker): expose server discovery identity (#3322)\n\nDocker and Helm deployments could keep a Server at DEFAULT when another service or graph space was intended. Service metadata could also truncate names containing / or -, and discovery queries used the wrong label for graph space. The image and chart now pass the selected configuration into native properties, retain complete service names and send the correct raw discovery labels."
    },
    {
      "commit": "e130233c7575aa159f859f1e783a6fd6c98f93ae",
      "tree": "561054f55bc8c9b34b9d009441f91f59a955fdf8",
      "parents": [
        "4b77b7bcb6bc094eabf41229820d435c4c267a65"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Thu Oct 15 19:42:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 19:42:46 2026 +0800"
      },
      "message": "fix(test): include same-millisecond PD logs (#3353)\n\n- include the current millisecond in log test ranges\n- correct expected and actual assertion arguments\n- cover exclusive log bounds with fixed RocksDB keys"
    },
    {
      "commit": "4b77b7bcb6bc094eabf41229820d435c4c267a65",
      "tree": "a07ba3ab6d6630dcc8c8c7886ffe2e894ad906a6",
      "parents": [
        "a1045160c59d40f8d69d5dd7be0eb6ed6eaf4a83"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Thu Oct 15 03:37:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 03:37:03 2026 +0800"
      },
      "message": "feat(helm): support easy \u0026 strict mode for k8s deployment (#3338)\n\nMake a fresh Helm installation straightforward on internal Kubernetes clusters. Previously, custom NodePorts and HTTP entrypoints required additional acknowledgements, the UI was disabled, and startup tools pulled a separate curl image. The default now installs the authenticated UI and API through automatic NodePorts, with persistent data and explicit component overrides."
    },
    {
      "commit": "a1045160c59d40f8d69d5dd7be0eb6ed6eaf4a83",
      "tree": "7236ba08eacc1f0b051b5325d0aa3d4d38d4a4f1",
      "parents": [
        "e4934c20684c47b12786d54e94d451e66e43cbcb"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Thu Oct 15 03:13:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 03:13:28 2026 +0800"
      },
      "message": "fix(store): unblock batch scan cancellation (#3345)\n\n- publish batch worker state before scheduling\n- notify and cancel readers outside the manager monitor\n- cover blocked half-close cancellation and document ownership"
    },
    {
      "commit": "e4934c20684c47b12786d54e94d451e66e43cbcb",
      "tree": "119b7fc4beafe49c19f126781485fb342513184e",
      "parents": [
        "449beb0230343e41270692c0fec3c8dfcfb45d73"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Thu Oct 15 03:12:59 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 03:12:59 2026 +0800"
      },
      "message": "refactor(server): close retained graphs on shutdown (#3347)\n\n- retry retained graph closes before task DB shutdown\n- preserve event delivery until cleanup completes\n- cover pending tasks and explicit close retries"
    },
    {
      "commit": "449beb0230343e41270692c0fec3c8dfcfb45d73",
      "tree": "95427bee16ce3dab35c2def965d2e9abe78a69c8",
      "parents": [
        "97a7b29825f28885ef8d21d8519a1596e7440bef"
      ],
      "author": {
        "name": "Duoduo Wang",
        "email": "ddgerm@outlook.com",
        "time": "Thu Oct 15 03:12:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 03:12:16 2026 +0800"
      },
      "message": "refactor(server): handle SameNeighborsBatchAPI diff for client (#2825)\n\n- retain verification of old and new bcrypt costs\n- keep the default password hashing cost assertion\n- remove hardware-dependent elapsed time comparisons\n\n---------\n\nCo-authored-by: imbajin \u003cjin@apache.org\u003e"
    },
    {
      "commit": "97a7b29825f28885ef8d21d8519a1596e7440bef",
      "tree": "f6abe5830005c2127a1e7f6f9f92f781c049eeb6",
      "parents": [
        "e1d9c696c1611925f904d9d05cf39d0e058a4865"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Thu Oct 15 02:17:55 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 02:17:55 2026 +0800"
      },
      "message": "fix(server): prevent lost kout results in race-condition (#3342)\n\n- serialize writes to each shared traversal result set\n- keep distinct-result limit checks and counts atomic\n- cover concurrent ids and Kout layer semantics"
    },
    {
      "commit": "e1d9c696c1611925f904d9d05cf39d0e058a4865",
      "tree": "614010cc15335ea5a4a997bf7831d7705d1690c9",
      "parents": [
        "06f90a9f05b0f9a6dc71be112e55ad71e8083d18"
      ],
      "author": {
        "name": "Arshil",
        "email": "arshilkxwork@gmail.com",
        "time": "Wed Oct 14 23:40:43 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 15 02:10:43 2026 +0800"
      },
      "message": "fix(server): sanitize Prometheus metric names (#3344)\n\nCache metric keys such as \"...Cache.schema~DEFAULT-hugegraph.hits\" kept\nthe \u0027~\u0027 when written to /metrics, and Prometheus rejected the whole\nscrape. Each of the two name helpers stripped a fixed set of\ncharacters, so any character outside that set needed its own patch."
    },
    {
      "commit": "06f90a9f05b0f9a6dc71be112e55ad71e8083d18",
      "tree": "d85bb2cdde609df30f26ad6b98aab50c8f59c4e0",
      "parents": [
        "c23c7c86d1b82495585cc3289d2376a1803c4866"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 14 14:07:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 14:07:03 2026 +0800"
      },
      "message": "fix(ci): preserve selectively collected coverage (#3343)\n\nSelective CI uploads only the test groups it executes, so treating each partial upload as a complete project report can show artificial coverage changes."
    },
    {
      "commit": "c23c7c86d1b82495585cc3289d2376a1803c4866",
      "tree": "436d2f68d2a7a6cfe04cdd0922927e49bb079f5f",
      "parents": [
        "76ca3df4e920fb6521515e7b6b97a09bdec65210"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 14 13:37:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 13:37:08 2026 +0800"
      },
      "message": "fix(server): preserve caller tx on cancel (#3340)\n\nPreserve caller transactions during cancellation.\nKeep worker cleanup in its execution path.\nCover direct and failed cancellation with real tests.\nDocument transaction ownership and fix the fixture."
    },
    {
      "commit": "76ca3df4e920fb6521515e7b6b97a09bdec65210",
      "tree": "3344e09b752d2b97512ed6d5fb70cfd8a70c304e",
      "parents": [
        "4facf9841a8c4dab2d888e33f52fc3620f9c6201"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 14 13:32:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 13:32:01 2026 +0800"
      },
      "message": "fix: preserve int map entries during resize (#3341)\n\n- hash keys against the captured table generation\n- retry removal after a competing chain update\n- verify parallel growth reads removals and size"
    },
    {
      "commit": "4facf9841a8c4dab2d888e33f52fc3620f9c6201",
      "tree": "24b2800e8eb9bda6571c365da75e0361454f7663",
      "parents": [
        "d168089b782bac21adb5ba4cf72febc04b56e37c"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 14 13:29:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 13:29:49 2026 +0800"
      },
      "message": "fix(test): compare canonical snapshot paths (#3339)\n\nCompare real directory identities in the sync fixture.\nPreserve snapshot marker and directory sync assertions.\nHandle macOS temporary directory aliases."
    },
    {
      "commit": "d168089b782bac21adb5ba4cf72febc04b56e37c",
      "tree": "6fab034d95bcc8d3a748f190e5c50e666b63fc05",
      "parents": [
        "92af2f89c320c3e6fa7c10765a061f3edadea319"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 14 12:34:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 12:34:31 2026 +0800"
      },
      "message": "fix: align Java 17 runtime compatibility\n\n- Add the minimal Hessian `java.lang` permission to PD and Store component option files. Console and store-dump reuse Server\u0027s option file; custom JVM options cannot replace the required permissions. Missing or unreadable option files fail immediately.\n- Open `java.nio` for HBase\u0027s `Bits.unaligned()` initialization and `java.lang` for SOFA RPC\u0027s `Throwable.cause` access in Server, both confirmed by runtime diagnostics.\n- Reuse one log checker for positive Maven suites, startup and Console smoke, and the existing native smoke. Capture stdout, stderr and active background-service logs while preserving command exit status and native-specific checks.\n- Forward complete cluster text logs into the captured suite output before node-directory cleanup. Preserve original logs and fail the log check if they cannot be read or the node is still running.\n\n- Preserve the reduced CI policy after rebasing: log-checker contracts run in their executing suites, test-only changes do not trigger post-merge smoke, and RISC-V reuses its generated distribution without another Maven JVM launch.\n\nDependency versions and persisted formats remain unchanged."
    },
    {
      "commit": "92af2f89c320c3e6fa7c10765a061f3edadea319",
      "tree": "631dd3eadf6c9ec605def2baf464114b351a755b",
      "parents": [
        "ce22afe96feb6828f21883819b134bae0c80c1f6"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 14 04:02:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 04:02:09 2026 +0800"
      },
      "message": "fix(commons): handle missing MAC addresses (#3335)\n\nVPN and tunnel interfaces can have an IP address without a hardware address. Previously MAC discovery threw a NullPointerException and left an empty cache, hiding usable interfaces on the next call."
    },
    {
      "commit": "ce22afe96feb6828f21883819b134bae0c80c1f6",
      "tree": "697d589294318b39f53fae7d4538d42500b37bea",
      "parents": [
        "0b7c0de3e7c8670a3c759fa80f48a7b6642d8578"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Wed Oct 14 04:01:23 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 14 04:01:23 2026 +0800"
      },
      "message": "refactor: reduce runner usage and scope CI to speed up (#3337)\n\nDocumentation-only changes currently request nine CI runners, and ordinary Server changes also trigger expensive compatibility and distributed suites. Separate planning, Java-version and result jobs repeatedly re-enter the shared runner queue.\n\nThis change gives CI one entry point, reduces documentation changes to one preflight runner, and limits costly validation to related inputs, weekly coverage or explicit manual runs."
    },
    {
      "commit": "0b7c0de3e7c8670a3c759fa80f48a7b6642d8578",
      "tree": "6a9271e624346fce2d049d3d9fec1525b693f3a5",
      "parents": [
        "b84454fb00498cd017bc5f258da6d0fe1713813b"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Tue Oct 13 15:46:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 15:46:01 2026 +0800"
      },
      "message": "refactor(server): update arthas to 4.1.5 (#3333)\n\n- update Server Arthas attach and packaging to 4.1.5\n- preserve HTTP/telnet settings and disable the optional MCP endpoint\n- verify one-time execution and explicit session cleanup\n- update runtime docs, embedded licenses and dependency inventory"
    },
    {
      "commit": "b84454fb00498cd017bc5f258da6d0fe1713813b",
      "tree": "f03da9fabd05594f43af09151212ab07d0980069",
      "parents": [
        "c1e7aba7774872d0e06c41b2519da3dd1c405567"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Tue Oct 13 15:25:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 15:25:17 2026 +0800"
      },
      "message": "fix(cache): skip oversized offheap query keys (#3321)\n\n* fix(cache): skip oversized offheap query keys\n\n- treat oversized query keys as optional cache misses\n- retain backend execution and persistent id encoding\n- cover ascii and utf8 byte boundaries\n- preserve normal key lookup and invalidation"
    },
    {
      "commit": "c1e7aba7774872d0e06c41b2519da3dd1c405567",
      "tree": "4f4df12dee2b09fa7cca14042bde5e5940bc1e60",
      "parents": [
        "87097bc962a495f9e255f83a4b9c00f5a3f21d52"
      ],
      "author": {
        "name": "KAI",
        "email": "himnshuverma10152006@gmail.com",
        "time": "Tue Oct 13 12:47:25 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 15:17:25 2026 +0800"
      },
      "message": "test: add coverage across struct, commons, server, pd, store and cluster (#3309)\n\n- Add and register tests for Struct codecs, Commons options and RPC, Server RocksDB and HStore routing, PD Raft operations, Store buffers and snapshots, and basic cluster CRUD.\n- Use owned temporary resources and retain the existing stress-test exclusions.\n- Make concurrent map tests collect writer and reader failures, close their executors, and verify sparse-key growth through the public API.\n- Synchronize cursor handoff and wait for the actual asynchronous Gremlin connection close. The existing capacity, edge-count, channel, reference-count and resource-release assertions remain intact.\n\n---------\n\nCo-authored-by: imbajin \u003cjin@apache.org\u003e"
    },
    {
      "commit": "87097bc962a495f9e255f83a4b9c00f5a3f21d52",
      "tree": "d42d1506a4cb18bf8a1e6d24ed2fcd5864eaefc9",
      "parents": [
        "62faab73d6f28ac810035e1614e889feaa8b75eb"
      ],
      "author": {
        "name": "ayanx",
        "email": "98254953+byteayan@users.noreply.github.com",
        "time": "Tue Oct 13 12:36:09 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 15:06:09 2026 +0800"
      },
      "message": "docs(docker): correct the crash-file volume and directory notes (#3332)\n\nA later `docker compose down -v` does not remove a volume that an\nearlier plain `down` left behind. Say to note its name with\n`docker inspect` and remove it with `docker volume rm \u003cname\u003e`, and warn\nthat `docker volume prune` deletes every unused anonymous volume on the\nDocker host. Only a start that gets as far as starting Java creates a\n`heapdump_*` directory."
    },
    {
      "commit": "62faab73d6f28ac810035e1614e889feaa8b75eb",
      "tree": "10c3aec69de676cb15417d814b6fd63ca01813ee",
      "parents": [
        "b73c13c5c276f11fdfb3ecf938d5da7e007a7ebc"
      ],
      "author": {
        "name": "Arshil",
        "email": "arshilkxwork@gmail.com",
        "time": "Tue Oct 13 11:42:28 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 14:12:28 2026 +0800"
      },
      "message": "fix(server): decode auth as UTF8 and split on the first colon (#3290)\n\nAuthenticationFilter decoded the HTTP Basic credential as US-ASCII and split it on every colon. The user API accepts passwords that contain non-ASCII characters or a colon, so an account given such a password, including the admin account, could no longer authenticate with Basic auth. A non-ASCII password received 401, and a password containing a colon received 400."
    },
    {
      "commit": "b73c13c5c276f11fdfb3ecf938d5da7e007a7ebc",
      "tree": "a6242dce17e1df66088c557736766ed98d75a3cb",
      "parents": [
        "8639720ed659f3186ce30aad78cd1052d0808595"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Tue Oct 13 13:14:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 13:14:37 2026 +0800"
      },
      "message": "refactor(server): honor cgroup reclaim protection (#3325)\n\narent cgroup cache could be counted as reclaimable even when sibling memory.min protects it. Exclude that credit when protection is active or cannot be established. Finite limits with unknown usage provide no heap budget; recognized v1 unlimited sentinels retain the existing host fallback."
    },
    {
      "commit": "8639720ed659f3186ce30aad78cd1052d0808595",
      "tree": "993acb2f80d28873859e9b07a214bb3bff2f279b",
      "parents": [
        "87239c555c50b2753461b6b47a8fb3e137f88df9"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Tue Oct 13 13:13:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 13:13:31 2026 +0800"
      },
      "message": "fix: omit documentation images from source releases (#3328)"
    },
    {
      "commit": "87239c555c50b2753461b6b47a8fb3e137f88df9",
      "tree": "5d19ed6e2e94b9d81b75713d6d7d6356c8e7321c",
      "parents": [
        "7a84cde0ec03d0f832c05eed25ba8b2287712095"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Tue Oct 13 11:35:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 11:35:41 2026 +0800"
      },
      "message": "refactor(core): drain tasks before graph deletion (#3308)\n\nA cancelled task can still be executing or saving its completion callback. Graph deletion previously treated logical cancellation or a failed scheduler close as sufficient to remove data and registrations. This change waits for the actual local owners to exit first."
    },
    {
      "commit": "7a84cde0ec03d0f832c05eed25ba8b2287712095",
      "tree": "4a1da3f8c7db304c6de2e48bf50e7f35ee972325",
      "parents": [
        "2691ae543d5ac8f69fbc9caf9b9e4a386932639f"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Tue Oct 13 11:34:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 11:34:58 2026 +0800"
      },
      "message": "fix(server): preserve auth property strings (#3327)\n\n- escape boundary control bytes with the auth encoder\n- retain the initializer JVM UTF-8 locale\n- verify minimum keys and report skipped native checks\n- document image and existing-account upgrade limits"
    },
    {
      "commit": "2691ae543d5ac8f69fbc9caf9b9e4a386932639f",
      "tree": "3f50dec9313c8ef602d867814acc8710a7d060a2",
      "parents": [
        "68fb04536b3c550e6c9cddbc6934dd4bcbb87cae"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Tue Oct 13 10:21:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 10:21:24 2026 +0800"
      },
      "message": "fix: scope SVN additions to the current Server release (#3323)"
    },
    {
      "commit": "68fb04536b3c550e6c9cddbc6934dd4bcbb87cae",
      "tree": "290600f43c4a04a7592d7b07217d81803440d53a",
      "parents": [
        "b58a77ce4cb0d20a9f1487b5418df8b0b121e1e1"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Tue Oct 13 01:01:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Oct 13 01:01:17 2026 +0800"
      },
      "message": "refactor(server): respect cgroup heap limits (#3320)\n\n- bound default heap sizing by remaining cgroup memory\n- resolve controller mounts and visible ancestor limits\n- add memory sizing regression checks to server CI\n- restore the trusted and limited retry workflow\n- select required jobs from the current failed attempt\n- rerun selected producers and their dependent jobs\n- preserve source guards and paused PR retries"
    },
    {
      "commit": "b58a77ce4cb0d20a9f1487b5418df8b0b121e1e1",
      "tree": "7d84d6ed10a9cb24fbf067f35e03103dbc4dbbd4",
      "parents": [
        "6aa362a3f6349d0b14081efed172ce889641a53b"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Mon Oct 12 21:53:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 21:53:20 2026 +0800"
      },
      "message": "refactor(server): close traversal iterators on failure (#3317)\n\nAn OLTP edge consumer could leave its active iterator open after failure, early stop or interruption. A full queue could also keep its producer blocked after the worker failed, and a later transaction cleanup failure could replace the original business error.\n\nClose the owned iterator in finally, using the original input when preparation fails. Stop failed consumer queues so blocked producers can exit, propagate a normal stop so producers stop reading inputs, retain the first terminal error, and attach later cleanup failures as suppressed exceptions. Preserve the worker transaction binding and completion cleanup from #3314 while integrating current master and both native test registrations."
    },
    {
      "commit": "6aa362a3f6349d0b14081efed172ce889641a53b",
      "tree": "175480fd9619a231c513f7131b880b679a5f9c2d",
      "parents": [
        "f7a0a793ade3afe5c84e4e538fb735f69d66cf97"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Mon Oct 12 16:58:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 16:58:58 2026 +0800"
      },
      "message": "fix(server): bound final partition diagnostic (#3316)\n\n- bound the final HTTP diagnostic with the existing budget\n- preserve exit statuses and signal child-process cleanup\n- document and test the two independent timeout stages"
    },
    {
      "commit": "f7a0a793ade3afe5c84e4e538fb735f69d66cf97",
      "tree": "cf9bd4462336d1f644b2e8a8b896b74b439041ea",
      "parents": [
        "a2475305fa40cf628ac63151fbe422da5232c4ef"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Mon Oct 12 16:58:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 16:58:36 2026 +0800"
      },
      "message": "fix(server): release traversal worker leases (#3314)\n\n- bind worker transactions before consuming lazy edge queries\n- release worker-owned backend leases on completion and failure\n- cover RocksDB lease cleanup and caller transaction boundaries"
    },
    {
      "commit": "a2475305fa40cf628ac63151fbe422da5232c4ef",
      "tree": "953f1d8f4b2a24599be3d8342fcc247a50541352",
      "parents": [
        "b75bc7281a4223b80ef0dec9de61c37803305075"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Mon Oct 12 16:57:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 16:57:48 2026 +0800"
      },
      "message": "fix(server): respect vertex graphspace permissions (#3315)\n\n- include graphspace in six vertex permission declarations\n- verify real Jersey scoped authorization before and after\n- preserve space, graph and action rejection boundaries"
    },
    {
      "commit": "b75bc7281a4223b80ef0dec9de61c37803305075",
      "tree": "1d00ca675f01c74865669caaaafedb346b110362",
      "parents": [
        "cfc5c238ca54d7ced5aacd117d4a5f3613ffdb93"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Mon Oct 12 16:56:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 16:56:45 2026 +0800"
      },
      "message": "fix(store): recover channels after unavailable scans (#3313)\n\nA scan could keep using a stale Store channel after a node restart. Handle UNAVAILABLE scan failures through the existing expected-node notification path, retiring the failed pool before exposing the original error. Cancellation and invalid requests keep healthy connections, and stale notifications do not remove replacement nodes."
    },
    {
      "commit": "cfc5c238ca54d7ced5aacd117d4a5f3613ffdb93",
      "tree": "50b50ee6aa344b07a0a56f06eccb1bba6e696ac5",
      "parents": [
        "3cc8f61c33784347875e0f1ac4a3abd31701d091"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Mon Oct 12 10:38:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 10:38:26 2026 +0800"
      },
      "message": "fix(server): preserve container exit status (#3311)\n\nThe Server container watched a daemon JVM with tail --pid and returned 1 whenever it stopped. A normal JVM exit 0 and an application exit 42 therefore looked identical. The entrypoint now owns the existing foreground launcher and returns its status after readiness, including 137 for SIGKILL."
    },
    {
      "commit": "3cc8f61c33784347875e0f1ac4a3abd31701d091",
      "tree": "b8d1b7a6c5cb1bbc648dff4e9ebef3bbd8108fec",
      "parents": [
        "9014faa134e54d7ee8bd275381a3d38a2a5f626c"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Mon Oct 12 10:24:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 10:24:12 2026 +0800"
      },
      "message": "fix(helm): exclude source assets from packages (#3312)\n\n- exclude top-level diagrams and contributor fixtures\n- preserve runtime templates and the Helm test hook\n- add packaged-chart regression checks to CI\n- document the package boundary and size budget"
    },
    {
      "commit": "9014faa134e54d7ee8bd275381a3d38a2a5f626c",
      "tree": "e235dfc3c3df6b116493316af0ea0156b5e35e29",
      "parents": [
        "7644566e58f0a3f9acabfef7ab448714b7afe1f1"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Mon Oct 12 10:10:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 10:10:43 2026 +0800"
      },
      "message": "fix(store): bound jemalloc downloads (#3310)\n\nLimit connection and total transfer time."
    },
    {
      "commit": "7644566e58f0a3f9acabfef7ab448714b7afe1f1",
      "tree": "795cf1987b969a27e0f5bb6bf1373dc62cd9c90d",
      "parents": [
        "000d538abdcf1e92f0598cc06d979c6ab57ae288"
      ],
      "author": {
        "name": "contrueCT",
        "email": "contrue_CT@outlook.com",
        "time": "Mon Oct 12 02:09:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 02:09:26 2026 +0800"
      },
      "message": "refactor(server): clarify condition semantics for label queries (#2994)\n\n`ConditionQuery.condition()` historically combines several meanings in one API:\n\n- no matching condition\n- EQ/IN conditions whose intersection is empty\n- one resolved value\n- the raw list from a sole `IN` relation\n- an exception when several relations still resolve to multiple values\n\n---------\n\nCo-authored-by: imbajin \u003cjin@apache.org\u003e"
    },
    {
      "commit": "000d538abdcf1e92f0598cc06d979c6ab57ae288",
      "tree": "f43f12c2a59d6254f668cedf06943287fa95f081",
      "parents": [
        "4ffd71b1832f1c98182e16d04140da61a0a81cb8"
      ],
      "author": {
        "name": "Burak Kalaycı",
        "email": "kalayciburak1996@gmail.com",
        "time": "Sun Oct 11 12:24:56 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 11 17:24:56 2026 +0800"
      },
      "message": "fix(store): keep hostname store addresses (#3291)\n\nIpUtil.getNearestAddress treats a configured hostname as a dotted IPv4. Integer.parseInt fails on the first DNS label and the catch logs that as getRaftAddress, a method that does not exist. When the only collected address is loopback, the single-address shortcut replaces the hostname with 127.0.0.1."
    },
    {
      "commit": "4ffd71b1832f1c98182e16d04140da61a0a81cb8",
      "tree": "90f3671f9c37108e350278e4caea87f925c164a5",
      "parents": [
        "36bc1c64ba2db23c40965ad952f3942cca31b1a7"
      ],
      "author": {
        "name": "ayanx",
        "email": "98254953+byteayan@users.noreply.github.com",
        "time": "Sun Oct 11 14:38:34 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 11 17:08:34 2026 +0800"
      },
      "message": "fix(server): keep Server crash diagnostics after a container restart (#3258)\n\nWhen a hugegraph/server (HStore) container exits during startup, kubectl logs --previous shows only Starting HugeGraphServer failed and a pointer to logs/hugegraph-server.log. That file, any hs_err_pid*.log and any heap dump live inside the container, and Kubernetes discards them when it restarts the pod. In #3203 the stack trace was only recovered by mounting a volume at /hugegraph-server/logs before the first boot.\n\n---------\n\nCo-authored-by: imbajin \u003cjin@apache.org\u003e"
    },
    {
      "commit": "36bc1c64ba2db23c40965ad952f3942cca31b1a7",
      "tree": "f3a72067789869c3d29f4b385ed568db57390010",
      "parents": [
        "87a06a9b617e79e5d5b2dd3d75585f7f80d67a25"
      ],
      "author": {
        "name": "contrueCT",
        "email": "contrue_CT@outlook.com",
        "time": "Sun Oct 11 01:34:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 11 01:34:01 2026 +0800"
      },
      "message": "fix(server): initialize queries before serving (#3301)\n\nInitialize the query serializer before service preparation.\nExercise constructor ordering in a fresh JVM.\nVerify first Gremlin and subsequent REST queries over HTTP.\nKeep script restrictions and document the startup contract."
    },
    {
      "commit": "87a06a9b617e79e5d5b2dd3d75585f7f80d67a25",
      "tree": "6ea1878d874aa6b5eb849160eba1c08d2ac11f08",
      "parents": [
        "6df8dd909d56969322f90b505f1e0571464bccef"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Sat Oct 10 19:16:53 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 10 19:16:53 2026 +0800"
      },
      "message": "fix(common): verify HTTPS certificate identity (#3307)\n\nA custom truststore previously allowed a trusted certificate with the wrong server identity. HTTPS requests now retain OkHttp\u0027s default hostname verification: trust alone is insufficient, and a matching DNS or IP Subject Alternative Name is required. The public HostNameVerifier(String) constructor remains available."
    },
    {
      "commit": "6df8dd909d56969322f90b505f1e0571464bccef",
      "tree": "719568bc186a1e80d86b8a61bb44319afa710a42",
      "parents": [
        "ed3a2dfd2aeee3c87219fdf39f1a476c752e5e7f"
      ],
      "author": {
        "name": "contrueCT",
        "email": "contrue_CT@outlook.com",
        "time": "Sat Oct 10 18:40:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 10 18:40:14 2026 +0800"
      },
      "message": "fix(rocksdb): synchronize session close and reset (#3298)\n\nSerialize native batch disposal with cross-thread reset.\nSkip reset after the session has closed.\nCover the disposed-but-registered window with real JNI.\nKeep retained closed references safe after pool removal.\n\nCo-authored-by: imbajin \u003cjin@apache.org\u003e"
    },
    {
      "commit": "ed3a2dfd2aeee3c87219fdf39f1a476c752e5e7f",
      "tree": "0079899e5e4b4e6e6c6e5c8174b09a960fa67610",
      "parents": [
        "fd64f74568de4a5c1c9453a654d06ddfd92d28b6"
      ],
      "author": {
        "name": "imbajin",
        "email": "jin@apache.org",
        "time": "Sat Oct 10 18:33:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 10 18:33:01 2026 +0800"
      },
      "message": "refactor(store): drain TTL native resources on shutdown (#3304)\n\nShutdown waits for TTL workers and their native cleanup after RPC/Scan ownership drains. TTL closes its scan and borrowed session lease in order, attempts both releases, and retains cleanup failures as shutdown blockers.\nThe distribution stop script reports timeouts explicitly. Native reference-count, close-failure, active-read and shutdown regressions ship here. A real nonempty TTL scan with interrupted Spring close verifies that the database stays alive while the reader is blocked, then checks iterator/session drain before bean destruction."
    }
  ],
  "next": "fd64f74568de4a5c1c9453a654d06ddfd92d28b6"
}
