)]}'
{
  "log": [
    {
      "commit": "26044a3d371f81aaad534e188280f1493610eb6b",
      "tree": "c469c883e790cd1791c0b3514fa9deb7bab3b968",
      "parents": [
        "93753f7dc8fea0402f7a5c8ee9f080168b553219"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Fri Jul 10 10:20:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 10:20:01 2026 +0800"
      },
      "message": "Optimize IVF-RQ search hot paths (#57)"
    },
    {
      "commit": "93753f7dc8fea0402f7a5c8ee9f080168b553219",
      "tree": "224896ceec7f1f0ebc7f39713badc41cf80472e6",
      "parents": [
        "6e5fb91e28d66a332b1e6e9a8ff035f7c3d3ff8a"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Thu Jul 09 19:39:43 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 19:39:43 2026 +0800"
      },
      "message": "Add IVF_RQ query bits and format reservations (#56)"
    },
    {
      "commit": "6e5fb91e28d66a332b1e6e9a8ff035f7c3d3ff8a",
      "tree": "389b12ee58cc06cce8338d23754f889690c98d4b",
      "parents": [
        "35c461e15fab82312b709b60ce2fce3e4e55ac84",
        "76ccb19d36d0170866448c5f1fbe2493eacb3800"
      ],
      "author": {
        "name": "jerry",
        "email": "jinglining0@gmail.com",
        "time": "Tue Jun 30 11:13:50 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 11:13:50 2026 +0800"
      },
      "message": "Merge pull request #53 from XiaoHongbo-Hope/bump-java-snapshot-0.2.0\n\n[java] Bump snapshot version to 0.2.0"
    },
    {
      "commit": "76ccb19d36d0170866448c5f1fbe2493eacb3800",
      "tree": "389b12ee58cc06cce8338d23754f889690c98d4b",
      "parents": [
        "5cb54e1f122817fa75e4c1ad378fa00aceee94d6"
      ],
      "author": {
        "name": "Hongbo Xiao",
        "email": "hope@apache.org",
        "time": "Mon Jun 29 20:10:07 2026 -0700"
      },
      "committer": {
        "name": "Hongbo Xiao",
        "email": "hope@apache.org",
        "time": "Mon Jun 29 20:10:07 2026 -0700"
      },
      "message": "Bump Rust and Python versions to 0.2.0\n"
    },
    {
      "commit": "5cb54e1f122817fa75e4c1ad378fa00aceee94d6",
      "tree": "6cc41f4b3aef63ef514c084adfe1d0fe16f6645f",
      "parents": [
        "35c461e15fab82312b709b60ce2fce3e4e55ac84"
      ],
      "author": {
        "name": "Hongbo Xiao",
        "email": "hope@apache.org",
        "time": "Mon Jun 29 20:00:16 2026 -0700"
      },
      "committer": {
        "name": "Hongbo Xiao",
        "email": "hope@apache.org",
        "time": "Mon Jun 29 20:00:16 2026 -0700"
      },
      "message": "[java] Bump snapshot version to 0.2.0\n"
    },
    {
      "commit": "35c461e15fab82312b709b60ce2fce3e4e55ac84",
      "tree": "9c70f2bab788021536e777d8d31ad5ac9fa6f5b3",
      "parents": [
        "ef2cd40b616ecd00f7e6a95ff7e0e8a86be5eeb6"
      ],
      "author": {
        "name": "jerry",
        "email": "jinglining0@gmail.com",
        "time": "Tue Jun 30 10:43:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 10:43:00 2026 +0800"
      },
      "message": "Convert API to batched vector index training (#52)"
    },
    {
      "commit": "ef2cd40b616ecd00f7e6a95ff7e0e8a86be5eeb6",
      "tree": "774192c1ab1f5038301c7a48627438d4efcbda16",
      "parents": [
        "6c86ade48588325e0ace3aa532ed9a2cec09fc55"
      ],
      "author": {
        "name": "XiaoHongbo",
        "email": "hope@apache.org",
        "time": "Fri Jun 19 22:25:26 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 19 22:25:26 2026 +0800"
      },
      "message": "[java] Exclude native libraries from sources jar (#50)\n\nThe release build downloads the platform native libraries into\njava/src/main/resources/native/ before packaging, and Maven places\nthem into the binary jar as intended. However maven-source-plugin\nincludes resource directories by default, so the -sources.jar also\nbundled the native .so/.dylib/.dll binaries, making it nearly the\nsame size as the binary jar (~29MB) and shipping platform binaries\nin a sources artifact."
    },
    {
      "commit": "6c86ade48588325e0ace3aa532ed9a2cec09fc55",
      "tree": "2eb87abda02cdc6f7fe7d77b17210d194d4f0bba",
      "parents": [
        "a20342329b2de550fb1948784a784673835119dd"
      ],
      "author": {
        "name": "jianguotian",
        "email": "841604084@qq.com",
        "time": "Fri Jun 19 15:11:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 19 15:11:33 2026 +0800"
      },
      "message": "build(crates): add description to core and jni crates (#49)\n\n* build(crates): add description to core and jni crates\n\ncrates.io rejects publish without a description field; core and jni were\nmissing it (ffi already had one), failing the final-tag rust release. RC\nonly runs cargo publish --dry-run, which skips the server-side metadata\ncheck, so this surfaced only on the v0.1.0 publish.\n\n* build(crates): pin core version on ffi/jni path deps\n\ncargo publish rejects path deps without a version requirement. ffi/jni\ndepend on core via path-only, so they cannot be published. Pin version\u003d0.1.0\nalongside the path so the publish keeps the path for local builds and the\nversion for crates.io.\n\n---------\n\nCo-authored-by: jianguotian \u003cjianguotian2010@gmail.com\u003e"
    },
    {
      "commit": "a20342329b2de550fb1948784a784673835119dd",
      "tree": "dff3ac1a21bcea5f5320f7c9032bcf10b8d1b7ae",
      "parents": [
        "d815d0e5effe3dd7ac8e4977dc9868287f1141f3"
      ],
      "author": {
        "name": "jianguotian",
        "email": "841604084@qq.com",
        "time": "Mon Jun 15 16:55:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 15 16:55:41 2026 +0800"
      },
      "message": "ci: bump cibuildwheel to v4.1.0 (allowlisted SHA) (#48)\n\nThe pinned v3.3.1 SHA fell off the ASF Actions allowlist, causing Release\nstartup_failure on rc tags. Bump to v4.1.0, a current allowlisted SHA.\n\nCo-authored-by: mingfeng \u003ctjg281622@antgroup.com\u003e\nCo-authored-by: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "d815d0e5effe3dd7ac8e4977dc9868287f1141f3",
      "tree": "6d73899f6808eeacd5f20c2e6023f28a254fdd99",
      "parents": [
        "22e4990182467401a2f12b4917b0f0ee1e311fbe",
        "dfee3516fcf9998b181459bebd3a00ce7655116f"
      ],
      "author": {
        "name": "XiaoHongbo",
        "email": "hope@apache.org",
        "time": "Sat Jun 13 20:42:08 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 13 20:42:08 2026 +0800"
      },
      "message": "Merge pull request #46 from jianguotian/fix-bench-asf-header\n\n[core] Add ASF license header to core/benches files"
    },
    {
      "commit": "dfee3516fcf9998b181459bebd3a00ce7655116f",
      "tree": "6d73899f6808eeacd5f20c2e6023f28a254fdd99",
      "parents": [
        "22e4990182467401a2f12b4917b0f0ee1e311fbe"
      ],
      "author": {
        "name": "jianguotian",
        "email": "jianguotian2010@gmail.com",
        "time": "Sat Jun 13 04:20:58 2026 -0700"
      },
      "committer": {
        "name": "jianguotian",
        "email": "jianguotian2010@gmail.com",
        "time": "Sat Jun 13 04:20:58 2026 -0700"
      },
      "message": "Add ASF license header to core/benches files\n\nThe four benchmark sources under core/benches/ are shipped in the\nsource release tarball but were missing the ASF license header,\nwhich fails the Apache RAT license check. Add the standard header.\n"
    },
    {
      "commit": "22e4990182467401a2f12b4917b0f0ee1e311fbe",
      "tree": "63599704d4d3b7d1f9231e12c1b9d01d508e7175",
      "parents": [
        "d3d3565d714a511e90db536f1cb15f3a1aedcd2e"
      ],
      "author": {
        "name": "XiaoHongbo",
        "email": "hope@apache.org",
        "time": "Sat Jun 13 15:04:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 13 15:04:48 2026 +0800"
      },
      "message": "ci: deploy Java staging only for RC tags (#45)"
    },
    {
      "commit": "d3d3565d714a511e90db536f1cb15f3a1aedcd2e",
      "tree": "f6e5b2ca31a5aa58954f34bb1e62b570c857ec5e",
      "parents": [
        "acedeb99760c581e663dca16bd29231ff70f5650"
      ],
      "author": {
        "name": "XiaoHongbo",
        "email": "1346652787@qq.com",
        "time": "Sat Jun 13 13:29:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 13 13:29:14 2026 +0800"
      },
      "message": "ci: fix staging repo description for Java release (#44)"
    },
    {
      "commit": "acedeb99760c581e663dca16bd29231ff70f5650",
      "tree": "d8cd3e88f468dddec775f0bdfb3c2a2c4b3bb0db",
      "parents": [
        "b974335df10db1b49d2175e727b8762c6a1e51b1"
      ],
      "author": {
        "name": "jianguotian",
        "email": "841604084@qq.com",
        "time": "Fri Jun 12 19:35:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 19:35:32 2026 +0800"
      },
      "message": "ci: gate PyPI publish on rust+java success (#42)"
    },
    {
      "commit": "b974335df10db1b49d2175e727b8762c6a1e51b1",
      "tree": "ae6f7673329f424ac5ad1369c1009e468a0f5c43",
      "parents": [
        "054d7369114195d21d5a3abcb1b3f2d5ded6e26a"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Fri Jun 12 19:15:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 19:15:34 2026 +0800"
      },
      "message": "Optimize SIMD hot paths in vector indexes (#43)"
    },
    {
      "commit": "054d7369114195d21d5a3abcb1b3f2d5ded6e26a",
      "tree": "79634d11dd33a6e1d36c64d34eb78af061e02335",
      "parents": [
        "81f5f8d1cb0053eae55eef337cd0689564775a09"
      ],
      "author": {
        "name": "jianguotian",
        "email": "841604084@qq.com",
        "time": "Fri Jun 12 14:49:25 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 14:49:25 2026 +0800"
      },
      "message": "Add CI release infrastructure for Java/Rust/Python (#39)"
    },
    {
      "commit": "81f5f8d1cb0053eae55eef337cd0689564775a09",
      "tree": "d6271fc2449fa5d3232cdce68e324b47a0efc676",
      "parents": [
        "554b12143f2e8de1c3975eaabd778dcc86b81e98"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Fri Jun 12 11:36:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 11:36:00 2026 +0800"
      },
      "message": "Expand release test coverage (#41)"
    },
    {
      "commit": "554b12143f2e8de1c3975eaabd778dcc86b81e98",
      "tree": "c5aec9b337019b4df4f62e57802daf6f14484a6f",
      "parents": [
        "b4b6a571f71baed313893282226bf169f0da757a"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Fri Jun 12 10:19:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 10:19:14 2026 +0800"
      },
      "message": "Expose optimize for search API (#40)"
    },
    {
      "commit": "b4b6a571f71baed313893282226bf169f0da757a",
      "tree": "ead04235d2d7190429ab1c1a93ac0044c221bb10",
      "parents": [
        "dbf1d222f73a134270ed41636a79cc8232703e66"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Thu Jun 11 15:58:56 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 11 15:58:56 2026 +0800"
      },
      "message": "Add C FFI and ctypes Python bindings (#38)"
    },
    {
      "commit": "dbf1d222f73a134270ed41636a79cc8232703e66",
      "tree": "b313ea828c9b1e294146a4f15f4c933992714124",
      "parents": [
        "711a715508c8783efad51a83d9ca8fd04050557e"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Thu Jun 11 13:07:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 11 13:07:46 2026 +0800"
      },
      "message": "Reject non-zero v1 reserved bytes (#36)"
    },
    {
      "commit": "711a715508c8783efad51a83d9ca8fd04050557e",
      "tree": "9e42cc3e8ca40309fe99a23b671c03b79b15349a",
      "parents": [
        "9b7afc1fae91a46fafb86763ce290a779a4d3bd1"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Thu Jun 11 11:13:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 11 11:13:54 2026 +0800"
      },
      "message": "Tighten HNSW v1 storage metadata (#35)"
    },
    {
      "commit": "9b7afc1fae91a46fafb86763ce290a779a4d3bd1",
      "tree": "aaaf4b80d4ea44523ac425349df79a2dec47e0f5",
      "parents": [
        "e97896e25c76c2998d745db9045dc41a372ba419"
      ],
      "author": {
        "name": "QuakeWang",
        "email": "45645138+QuakeWang@users.noreply.github.com",
        "time": "Thu Jun 11 11:06:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 11 11:06:09 2026 +0800"
      },
      "message": "Reject non-finite vector inputs (#33)"
    },
    {
      "commit": "e97896e25c76c2998d745db9045dc41a372ba419",
      "tree": "a4a8f03c224909f263c09b41b84079ab65e963bf",
      "parents": [
        "9a6e09d6587ef7d2b6336a425e8425ac5da2e15a"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Thu Jun 11 09:34:18 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jun 11 09:34:18 2026 +0800"
      },
      "message": "Expose metadata types as strings in bindings (#34)"
    },
    {
      "commit": "9a6e09d6587ef7d2b6336a425e8425ac5da2e15a",
      "tree": "bdc22e85d2e2f9708425980f473a25b7af62b68c",
      "parents": [
        "516fe27e08be8ab9e0fb6c86bc66311c1062a076"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Wed Jun 10 23:31:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 23:31:24 2026 +0800"
      },
      "message": "Rename Java vector index package (#32)"
    },
    {
      "commit": "516fe27e08be8ab9e0fb6c86bc66311c1062a076",
      "tree": "c0c90a18b65d2d414143a582a85f96d3b64e2839",
      "parents": [
        "a95b6793e2df94948eb3dd22d322543e167d5ca8"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Wed Jun 10 22:59:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 22:59:10 2026 +0800"
      },
      "message": "Simplify vector index options API (#31)"
    },
    {
      "commit": "a95b6793e2df94948eb3dd22d322543e167d5ca8",
      "tree": "18f130bfdb47c3f51ee2cf780addacb5d2bd8ff6",
      "parents": [
        "efb5e63286ca5f1cfdca00c71869c5faa931be2d"
      ],
      "author": {
        "name": "QuakeWang",
        "email": "45645138+QuakeWang@users.noreply.github.com",
        "time": "Wed Jun 10 17:57:32 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 17:57:32 2026 +0800"
      },
      "message": "Guard JNI native handle lifecycle (#27)"
    },
    {
      "commit": "efb5e63286ca5f1cfdca00c71869c5faa931be2d",
      "tree": "96bf1e0623dff8df081106c137951cbef5f7d01d",
      "parents": [
        "f920f85dfe5c763336854c83dea19f2aecf5f822"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Wed Jun 10 17:40:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 17:40:09 2026 +0800"
      },
      "message": "Add v1 storage format fixtures (#30)"
    },
    {
      "commit": "f920f85dfe5c763336854c83dea19f2aecf5f822",
      "tree": "fd6ed0fd7d3390fbff24482f73171eacfff17134",
      "parents": [
        "6eb0b374d80c5c0398e20eb326a8d36862ad6cdd"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Wed Jun 10 16:16:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 16:16:34 2026 +0800"
      },
      "message": "Tighten v1 vector index format validation (#29)"
    },
    {
      "commit": "6eb0b374d80c5c0398e20eb326a8d36862ad6cdd",
      "tree": "4a018c96a8f1cc35617a37dba7a57a10d6e4e2a9",
      "parents": [
        "19dad70e4cafb0009cd32b467aaaf718488eae5b"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Wed Jun 10 15:31:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 15:31:19 2026 +0800"
      },
      "message": "Update README for multiple vector indexes (#28)"
    },
    {
      "commit": "19dad70e4cafb0009cd32b467aaaf718488eae5b",
      "tree": "0cc07f6f46c260aed6c6ff2d1ae0c80be0206165",
      "parents": [
        "9299ff7b65ba5b4b375af5474d9db05dfd72c6bf"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Wed Jun 10 14:55:30 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 14:55:30 2026 +0800"
      },
      "message": "Optimize vector index reads with batched pread (#26)"
    },
    {
      "commit": "9299ff7b65ba5b4b375af5474d9db05dfd72c6bf",
      "tree": "1fb7d7effcd8f1cb05c5c047848a77aad0d65ca3",
      "parents": [
        "fe773694fbb8adbbbb5f27ce4ad82ae40e75c69a"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Tue Jun 09 23:43:49 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 23:43:49 2026 +0800"
      },
      "message": "Add ANN benchmark for vector indexes (#25)"
    },
    {
      "commit": "fe773694fbb8adbbbb5f27ce4ad82ae40e75c69a",
      "tree": "42110b3581b4fb63359f36135cd96204ad02d408",
      "parents": [
        "ac63164cb5c2071fbae415c7c499e2ad30ac8f5c"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Tue Jun 09 22:13:05 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 22:13:05 2026 +0800"
      },
      "message": "Unify vector index APIs (#23)"
    },
    {
      "commit": "ac63164cb5c2071fbae415c7c499e2ad30ac8f5c",
      "tree": "c6b2ccff3d835ac9a7370574e3fee7feba495f99",
      "parents": [
        "a18e446f8a64aaa1fdd117dcbc12e02d1748b453"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Tue Jun 09 21:58:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 21:58:02 2026 +0800"
      },
      "message": "Optimize HNSW index build performance (#24)"
    },
    {
      "commit": "a18e446f8a64aaa1fdd117dcbc12e02d1748b453",
      "tree": "4d3fa3de185cdafaac8e6c43b6117dc82ff364ac",
      "parents": [
        "1de37a0c30e17d5d96a2654cbe51fbb6236a1246"
      ],
      "author": {
        "name": "QuakeWang",
        "email": "45645138+QuakeWang@users.noreply.github.com",
        "time": "Tue Jun 09 21:38:07 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 21:38:07 2026 +0800"
      },
      "message": "Guard JNI native calls against Rust panics (#21)"
    },
    {
      "commit": "1de37a0c30e17d5d96a2654cbe51fbb6236a1246",
      "tree": "7d8c1202ff924ad4f5237d245a4914e503b9a215",
      "parents": [
        "8bc5cfebc5a3151efefdcc4a76cad374be4a66df"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Tue Jun 09 16:51:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 16:51:16 2026 +0800"
      },
      "message": "Improve IVF HNSW SQ quantization (#22)"
    },
    {
      "commit": "8bc5cfebc5a3151efefdcc4a76cad374be4a66df",
      "tree": "c07d49e32439b3332d49f57833aec4bf0064b7d4",
      "parents": [
        "8e170e772625be0dae2eba7418589928f7cc8641"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Tue Jun 09 15:19:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 15:19:40 2026 +0800"
      },
      "message": "Add IVF HNSW SQ index (#20)"
    },
    {
      "commit": "8e170e772625be0dae2eba7418589928f7cc8641",
      "tree": "7f77b9520e8b935c8c28669c16c4cdec28cced56",
      "parents": [
        "f72c9b02ea4aa4533c46a153a1309a0666b01545"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Tue Jun 09 14:06:04 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 14:06:04 2026 +0800"
      },
      "message": "Add IVF_HNSW_FLAT index and disk reader (#19)"
    },
    {
      "commit": "f72c9b02ea4aa4533c46a153a1309a0666b01545",
      "tree": "336e2f7f06d940467fe20832073645a520581f5c",
      "parents": [
        "9612a724b195b3918411b91154f3f3ed59a2c6bb"
      ],
      "author": {
        "name": "QuakeWang",
        "email": "45645138+QuakeWang@users.noreply.github.com",
        "time": "Tue Jun 09 12:01:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 12:01:21 2026 +0800"
      },
      "message": "Guard IVFPQ index merge compatibility (#17)"
    },
    {
      "commit": "9612a724b195b3918411b91154f3f3ed59a2c6bb",
      "tree": "0b5d718e166abde5e47460ea0641f1f89a6c39e9",
      "parents": [
        "81963db3d39aaa83efc2c1eb52f04d7e5738548d"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Tue Jun 09 12:00:42 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 12:00:42 2026 +0800"
      },
      "message": "Add IVF_FLAT vector index (#18)"
    },
    {
      "commit": "81963db3d39aaa83efc2c1eb52f04d7e5738548d",
      "tree": "2e4667017e4710e98445d82a3d0ed756325efc94",
      "parents": [
        "e78df42082e3f1a4b8aa02b5bdb97b3731f221bd"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Mon Jun 08 22:16:06 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 22:16:06 2026 +0800"
      },
      "message": "Add Java and Python vector index APIs (#16)"
    },
    {
      "commit": "e78df42082e3f1a4b8aa02b5bdb97b3731f221bd",
      "tree": "e87f4eee7a8e150cf4ca0307b902115c70cb16ae",
      "parents": [
        "eddf3d4a8addfce1ade2b200e8ec451fdb47164b"
      ],
      "author": {
        "name": "JingsongLi",
        "email": "jingsonglee0@gmail.com",
        "time": "Mon Jun 08 20:26:56 2026 +0800"
      },
      "committer": {
        "name": "JingsongLi",
        "email": "jingsonglee0@gmail.com",
        "time": "Mon Jun 08 20:26:56 2026 +0800"
      },
      "message": "Add python/target/ to .gitignore\n"
    },
    {
      "commit": "eddf3d4a8addfce1ade2b200e8ec451fdb47164b",
      "tree": "923414935b354d1995efb5cc721a2275b532d1e1",
      "parents": [
        "3473e6056954b40a820555befe98eeb90293be26"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Mon Jun 08 20:25:54 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 20:25:54 2026 +0800"
      },
      "message": "Add Roaring bitmap filter pushdown (#15)"
    },
    {
      "commit": "3473e6056954b40a820555befe98eeb90293be26",
      "tree": "78111e1a606c793225fc9c4e7f8aa4fc2ab36240",
      "parents": [
        "3d078cd7065dedf4472fe635be8b08e829c90bb6"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Mon Jun 08 19:20:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 19:20:27 2026 +0800"
      },
      "message": "Reuse batch reader probed lists (#14)"
    },
    {
      "commit": "3d078cd7065dedf4472fe635be8b08e829c90bb6",
      "tree": "91a9e070fce502a1cc95bb8e33dbbee1becff897",
      "parents": [
        "cf73d26a6c326d9997716304c197bb295d758077"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Mon Jun 08 19:08:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 19:08:58 2026 +0800"
      },
      "message": "Validate batch reader search inputs (#13)"
    },
    {
      "commit": "cf73d26a6c326d9997716304c197bb295d758077",
      "tree": "b25568ababa84f5fc01af2eb5907a1c3b7a59961",
      "parents": [
        "379b0e041c4110fc32934f1031ef7e7d8711b8b1"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Mon Jun 08 18:59:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 18:59:20 2026 +0800"
      },
      "message": "Stream reader search for non-concurrent pread (#12)"
    },
    {
      "commit": "379b0e041c4110fc32934f1031ef7e7d8711b8b1",
      "tree": "7fd0f2065c72b10974a7eb79c5c64abab237282f",
      "parents": [
        "74eddafba46f45265ddcb9dd082757007527d8e2"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Mon Jun 08 17:40:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 17:40:24 2026 +0800"
      },
      "message": "Reduce delta inverted list preads (#11)"
    },
    {
      "commit": "74eddafba46f45265ddcb9dd082757007527d8e2",
      "tree": "1b0b724bd08c7a33aa809568e00e489040068438",
      "parents": [
        "8b72bcda4cbf9e5f8d709ad83b8e5b5b3bd791bd"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Mon Jun 08 16:38:53 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 16:38:53 2026 +0800"
      },
      "message": "Index disk shuffler partitions for direct reads (#10)"
    },
    {
      "commit": "8b72bcda4cbf9e5f8d709ad83b8e5b5b3bd791bd",
      "tree": "a7305f05837e60c1b09f79ee94513be646469947",
      "parents": [
        "16df93c442042b70c25a623d9a9b557242cc03fa"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Mon Jun 08 15:56:24 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 15:56:24 2026 +0800"
      },
      "message": "Improve reader I/O for batch vector search (#9)"
    },
    {
      "commit": "16df93c442042b70c25a623d9a9b557242cc03fa",
      "tree": "be05ddf050c03823b0581c1e184f9a02f1ec0bd0",
      "parents": [
        "ee8c7a4ad7ec994dbb9a4f160caf31e5fcfaa5b9"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Mon Jun 08 15:15:18 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 15:15:18 2026 +0800"
      },
      "message": "Add CONTRIBUTING.md, ASF yaml validator, and CI for JNI/Python (#8)"
    },
    {
      "commit": "ee8c7a4ad7ec994dbb9a4f160caf31e5fcfaa5b9",
      "tree": "03a3f4e0c22faadf674e14de81392037ee48e19a",
      "parents": [
        "38fbdb04347c75a67fc13c4822c3d225b2edecb2"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Mon Jun 08 14:40:37 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 14:40:37 2026 +0800"
      },
      "message": "Add JNI bindings, Python bindings, and PQ4 benchmark (#7)\n\nJNI module (jni/):\n- Writer API: createWriter, train, add, finishWrite — builds IVF-PQ\n  index and serializes to Java OutputStream via JniOutputStream\n- Reader API: openReader, search, batchSearch — lazy-loading reader\n  backed by Java SeekableInputStream via JniSeekableStream\n- JniSeekableStream: implements SeekRead with lock-protected seek+read,\n  optional pread via VectoredReadable for concurrent positional reads\n- JniOutputStream: implements SeekWrite for streaming index writes\n\nPython module (python/):\n- IVFPQReader: open from Python file object, search returns numpy arrays\n  (ids, distances), context manager support (__enter__/__exit__)\n- PyFileStream: implements SeekRead by delegating to Python file.seek/read\n\nBenchmark (core/benches/pq4_bench.rs):\n- Comparative benchmark: 8-bit vs 4-bit PQ vs 4-bit FastScan\n- Measures query latency, build time, and recall@10 vs brute-force\n- Run with: cargo bench --bench pq4_bench"
    },
    {
      "commit": "38fbdb04347c75a67fc13c4822c3d225b2edecb2",
      "tree": "d502c5994b3ee30314f7f20883e0c3b363e64f6f",
      "parents": [
        "54fbcfe0ca51e1ca69e0b2e03f8628e1bff99227"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Mon Jun 08 13:10:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 13:10:10 2026 +0800"
      },
      "message": "Add io module and reader-based search (#6)"
    },
    {
      "commit": "54fbcfe0ca51e1ca69e0b2e03f8628e1bff99227",
      "tree": "f2d068d1dc41b0e96e969323ae5df9f80cf84d07",
      "parents": [
        "17273a81bd15a1799b2dc5d570f2a25469bbc1fb"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Mon Jun 08 08:34:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 08:34:02 2026 +0800"
      },
      "message": "Add IVF-PQ index module (#5)"
    },
    {
      "commit": "17273a81bd15a1799b2dc5d570f2a25469bbc1fb",
      "tree": "4cef8c6c2a6ca7fc754e2dd523f77d1851de2a08",
      "parents": [
        "71d8322437573714fe6e42fac422ec9fdcf7e9a3"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Sun Jun 07 21:20:09 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 07 21:20:09 2026 +0800"
      },
      "message": "Add opq, shuffler, and fastscan modules (#3)\n\n- opq: Optimized Product Quantization with rotation matrix (SVD-based)\n- shuffler: Disk-based partition shuffler for large-scale index building\n- fastscan: Block-layout 4-bit PQ scanning with SIMD acceleration"
    },
    {
      "commit": "71d8322437573714fe6e42fac422ec9fdcf7e9a3",
      "tree": "af97d303bd0beaf294ebc11079c06ddd0252bfa4",
      "parents": [
        "2027edc81aa813a1af8394266f53064fb6c9f377"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Fri Jun 05 21:40:52 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 21:40:52 2026 +0800"
      },
      "message": "Add .asf.yaml for GitHub repo settings and notifications (#4)"
    },
    {
      "commit": "2027edc81aa813a1af8394266f53064fb6c9f377",
      "tree": "10197bb04e717fac373c904946c4a8f250ce0fb8",
      "parents": [
        "3acc20eeeafdb9f57789c2b8e9d52d00aabeb646"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Fri Jun 05 21:14:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 21:14:17 2026 +0800"
      },
      "message": "Add core foundation modules (#1)\n\nBring over the basic building blocks: distance (L2/IP/Cosine + SIMD),\nblas (sgemm), kmeans (k-means++/hierarchical/streaming), and product\nquantizer (train/encode/decode/distance table). Skips higher-level\nmodules (ivfpq, opq, fastscan, shuffler, io) and language bindings."
    },
    {
      "commit": "3acc20eeeafdb9f57789c2b8e9d52d00aabeb646",
      "tree": "4dfe7ab10055ccf98b227ad0506c2773c0d4a94e",
      "parents": [
        "f66a58ea9a928656f5f975cd0ea48fc784062087"
      ],
      "author": {
        "name": "Jingsong Lee",
        "email": "jingsonglee0@gmail.com",
        "time": "Fri Jun 05 18:45:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 18:45:17 2026 +0800"
      },
      "message": "Add CI workflow (#2)"
    },
    {
      "commit": "f66a58ea9a928656f5f975cd0ea48fc784062087",
      "tree": "96f3a24636a459311d37609f70bfdc2daaf6c15f",
      "parents": [],
      "author": {
        "name": "JingsongLi",
        "email": "jingsonglee0@gmail.com",
        "time": "Fri Jun 05 12:05:39 2026 +0800"
      },
      "committer": {
        "name": "JingsongLi",
        "email": "jingsonglee0@gmail.com",
        "time": "Fri Jun 05 12:05:39 2026 +0800"
      },
      "message": "Add README.md\n"
    }
  ]
}
