)]}'
{
  "log": [
    {
      "commit": "ab57cb91cb64037a6d1e7319e9dd3d40849ed7f9",
      "tree": "a560e58b7d969e8a0c06c6b9d76ad2a2e25f77e7",
      "parents": [
        "051b00b528691691103891f335885afe2c506760"
      ],
      "author": {
        "name": "Tim Saucer",
        "email": "timsaucer@gmail.com",
        "time": "Sat Jun 13 22:43:23 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 13 14:43:23 2026 -0600"
      },
      "message": "build: Cargo workspace + native-common extraction (1/6) (#104)"
    },
    {
      "commit": "051b00b528691691103891f335885afe2c506760",
      "tree": "c5cc876870a8d823e2ac50ad810640002b567637",
      "parents": [
        "60351badf30c83f5b8e07e731fda1d51470b27f8"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Wed Jun 10 13:47:45 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 10 13:47:45 2026 -0600"
      },
      "message": "feat: add SessionContextBuilder.withSparkFunctions for Spark-compatible functions (#100)"
    },
    {
      "commit": "60351badf30c83f5b8e07e731fda1d51470b27f8",
      "tree": "8aeb0a067caceb2d6bbd9530c18d9c528dc118a8",
      "parents": [
        "bbd700a854969b7ef6c148f0e384c57984d559bc"
      ],
      "author": {
        "name": "devoopsman45",
        "email": "hitesh.d33@gmail.com",
        "time": "Tue Jun 09 17:39:25 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 09 14:39:25 2026 -0700"
      },
      "message": "feat(session): add tableExists and deregisterTable to SessionContext (#102)\n\n## Which issue does this PR close?\n\n- Closes #101 .\n\n## Rationale for this change\nSessionContext can let a caller register tables but there is no way to\n\n    Check whether a table name is already registered\n    Remove a registered table from the session\n\nThis makes it tough to write safer code while registering\n\n## What changes are included in this PR?\n\n- `SessionContext.tableExists(String name)` — returns true if a table\n    with that name is registered in the session\n  - `SessionContext.deregisterTable(String name)` — removes a registered\n    table; no-op if the name is not found\n\n  Both are thin JNI wrappers over DataFusion\u0027s existing\n  `SessionContext::table_exist` and `SessionContext::deregister_table`\n  on the Rust side.\n\n\n## Are these changes tested?\n\nYes. `SessionContextTableRegistrationTest` covers:\n  - tableExists returns false for an unregistered table\n  - tableExists returns true after registerCsv\n  - deregisterTable removes a registered table\n  - deregisterTable is a no-op for an unregistered table\n  - Both methods throw IllegalStateException on a closed context\n\n\n--\u003e\n\n## Are there any user-facing changes?\n\n  Yes — two new public methods on `SessionContext`. Additive only, no\n  breaking changes."
    },
    {
      "commit": "bbd700a854969b7ef6c148f0e384c57984d559bc",
      "tree": "832cf712b304ba077772fea85aa4a8f9789d3aed",
      "parents": [
        "ad22ab6af926d0667159caa4e8560c2c29de1d98"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Thu May 28 08:57:08 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 08:57:08 2026 -0600"
      },
      "message": "docs: document Maven Central coordinates for 0.1.0 (#99)"
    },
    {
      "commit": "ad22ab6af926d0667159caa4e8560c2c29de1d98",
      "tree": "35a4f24c858b54c6041be01b69106b8d47ebcef9",
      "parents": [
        "f9cdc159281f719cf2279832681cc1b95ceca579"
      ],
      "author": {
        "name": "Bhargava Vadlamani",
        "email": "11091419+coderfender@users.noreply.github.com",
        "time": "Thu May 28 09:56:45 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 08:56:45 2026 -0600"
      },
      "message": "chore: setup github actions (#93)"
    },
    {
      "commit": "f9cdc159281f719cf2279832681cc1b95ceca579",
      "tree": "7464605c1b7f1378c70fceda8995e2c4f6277f7f",
      "parents": [
        "d078c127acf4298c1a90ed54e90382818df95a66"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Tue May 26 11:29:36 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 25 21:29:36 2026 -0600"
      },
      "message": "feat(session): expose disableSpill and maxTempDirectorySize on SessionContextBuilder (#84)"
    },
    {
      "commit": "d078c127acf4298c1a90ed54e90382818df95a66",
      "tree": "b288d836d128ed7270b88d6cfb7dad7f0d6c0128",
      "parents": [
        "ff969cbc93df2d0f9ebd2936f5caed1e1b482c78"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Tue May 26 11:29:19 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 25 21:29:19 2026 -0600"
      },
      "message": "feat(substrait): add SessionContext.fromSubstrait gated behind opt-in Cargo feature (#80)"
    },
    {
      "commit": "ff969cbc93df2d0f9ebd2936f5caed1e1b482c78",
      "tree": "8edad2e24e6d5dc86e74d8bb0fbfb46170f6b17a",
      "parents": [
        "5f8b57c14d3bce5e8d5b4a08e24cffd04a2720b4"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Mon May 25 20:54:36 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 25 20:54:36 2026 -0600"
      },
      "message": "chore(release): include staged Maven artifacts link in vote email template (#92)"
    },
    {
      "commit": "5f8b57c14d3bce5e8d5b4a08e24cffd04a2720b4",
      "tree": "f710981c985b9f0b4d9eca26d34356eb57b0239b",
      "parents": [
        "74ceab576cabd979404a25e5d0732ddc8fedc128"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Tue May 26 10:54:16 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 25 20:54:16 2026 -0600"
      },
      "message": "feat(dataframe): expose set operations (union, intersect, except) (#67)"
    },
    {
      "commit": "74ceab576cabd979404a25e5d0732ddc8fedc128",
      "tree": "7d85fe69c0927c089bf287f1617f0c1e2e52616d",
      "parents": [
        "771756674e6ecc94641b1a530cad1d9b64a25964"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Mon May 25 18:35:00 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 25 18:35:00 2026 -0600"
      },
      "message": "chore(release): add 0.1.0 changelog and bump main to 0.2.0-SNAPSHOT (#91)"
    },
    {
      "commit": "771756674e6ecc94641b1a530cad1d9b64a25964",
      "tree": "eed0e7c466b6f5ef607fae8dd45c4b02ea6b63c0",
      "parents": [
        "67a7be10d4850a8ff91f82368fcddab687e487d2"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Mon May 25 18:33:05 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 25 18:33:05 2026 -0600"
      },
      "message": "ci: run build workflow on release branches (#90)"
    },
    {
      "commit": "67a7be10d4850a8ff91f82368fcddab687e487d2",
      "tree": "8fc470495c580fbf5a9f37c6be0cced4b3084921",
      "parents": [
        "76a54544edcd005fdd0c2a11db440453c36d62a8"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Mon May 25 18:28:42 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 25 18:28:42 2026 -0600"
      },
      "message": "chore(release): add changelog generator script (#88)"
    },
    {
      "commit": "76a54544edcd005fdd0c2a11db440453c36d62a8",
      "tree": "c8422a1c8cf986f54514076638e65342059562c4",
      "parents": [
        "5573fe26ccd25be000c1ce0529d1444c765cdaef"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Mon May 25 12:27:56 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 25 12:27:56 2026 -0600"
      },
      "message": "chore(release): add multi-platform release JAR build pipeline (#87)"
    },
    {
      "commit": "5573fe26ccd25be000c1ce0529d1444c765cdaef",
      "tree": "0341dad558560ce9cf3977a621f8623ba5b84561",
      "parents": [
        "c291b81ee1edc62cd0d1b2d68b2f6777e51346af"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Mon May 25 08:56:08 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 25 08:56:08 2026 -0600"
      },
      "message": "feat(loader): bundle native library inside the JAR (#77)"
    },
    {
      "commit": "c291b81ee1edc62cd0d1b2d68b2f6777e51346af",
      "tree": "207c9cd8a82dc4a33827d3c6930ba28678b5bb02",
      "parents": [
        "dc9b700c645570b22878036dffa14bf725750a67"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Sun May 24 20:45:21 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 24 06:45:21 2026 -0600"
      },
      "message": "feat(metrics): add SessionContext.memoryUsage and runtimeStats (#85)"
    },
    {
      "commit": "dc9b700c645570b22878036dffa14bf725750a67",
      "tree": "fdbc17039dc5c84ca06e148cdb9171d393dcd013",
      "parents": [
        "23fbf10fa1b207487eff30a13ad13706be3db3c9"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Sun May 24 20:43:40 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 24 06:43:40 2026 -0600"
      },
      "message": "feat(session): configure DataFusion\u0027s built-in CacheManager from Java (#78)"
    },
    {
      "commit": "23fbf10fa1b207487eff30a13ad13706be3db3c9",
      "tree": "85dc65ae1762190f0d299fb9e396fa6cc700bb13",
      "parents": [
        "d4f53df4ae94d423bd28f656dba16dd35adc801d"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Sun May 24 20:43:22 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 24 06:43:22 2026 -0600"
      },
      "message": "feat: typed DataFusionException hierarchy across the JNI boundary (#81)"
    },
    {
      "commit": "d4f53df4ae94d423bd28f656dba16dd35adc801d",
      "tree": "bfe242fafa7f84b3e1b91c93c7c2a702fa1e1928",
      "parents": [
        "4da766c63773ca29a8379d66ba8595ad25f85be1"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Sun May 24 10:00:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 23 20:00:51 2026 -0600"
      },
      "message": "feat(dataframe): expose sort and repartition (#66)"
    },
    {
      "commit": "4da766c63773ca29a8379d66ba8595ad25f85be1",
      "tree": "988a606567bd23c3daa0f530c9c47c64b0b71bbc",
      "parents": [
        "af78e613010d7cf2c336ab005dbdbd02ced6883b"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Fri May 22 21:08:10 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 07:08:10 2026 -0600"
      },
      "message": "fix(udf): declare scalar UDF signatures with Field, not ArrowType (#59)"
    },
    {
      "commit": "af78e613010d7cf2c336ab005dbdbd02ced6883b",
      "tree": "68a4e1b56c5ef06109e38dad1fbc98f08a7b7cfc",
      "parents": [
        "dfc8db4b55a1b91d15c3a1331407f2dcff445aaf"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Thu May 21 23:59:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 09:59:12 2026 -0600"
      },
      "message": "feat(dataframe): add join, joinOn, and JoinType (#72)"
    },
    {
      "commit": "dfc8db4b55a1b91d15c3a1331407f2dcff445aaf",
      "tree": "197ec5afbe2c0049562e3852c7b064da652a771f",
      "parents": [
        "7f495413bfb76bb8cbbb0e48de0b9b20535e4fa2"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Wed May 20 21:48:31 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 21:48:31 2026 -0600"
      },
      "message": "chore(release): add ASF release scripts for source tarballs (#76)"
    },
    {
      "commit": "7f495413bfb76bb8cbbb0e48de0b9b20535e4fa2",
      "tree": "d4ffa5385eef4debc60f7850ccc059b90483fe9b",
      "parents": [
        "77b5b72a6c62f0d1b6a69b642c8b0d5de398881f"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Wed May 20 23:15:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 09:15:34 2026 -0600"
      },
      "message": "feat(session): register object_store backends on SessionContextBuilder (#73)"
    },
    {
      "commit": "77b5b72a6c62f0d1b6a69b642c8b0d5de398881f",
      "tree": "ce7e631ac601d91e730dbbf4b9c82385a37b9ee6",
      "parents": [
        "89d5496d2d1f008f6c1fe38d1dc75414fb986f64"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Wed May 20 22:06:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 08:06:14 2026 -0600"
      },
      "message": "feat(dataframe): add schema, explain, cache, and describe introspection methods (#71)"
    },
    {
      "commit": "89d5496d2d1f008f6c1fe38d1dc75414fb986f64",
      "tree": "95c619e58ad7f5d53166a38e10a65270eb92fe31",
      "parents": [
        "2ecf3f16d38cf4f6fd1e9300f70234d1d2f27142"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 19 15:54:54 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 15:54:54 2026 -0600"
      },
      "message": "feat(datasource): add Java-implemented data sources (#65)"
    },
    {
      "commit": "2ecf3f16d38cf4f6fd1e9300f70234d1d2f27142",
      "tree": "2c63028e8059f30400f2a257eefbb42a64f7dc51",
      "parents": [
        "fe4414a7f92eabca337682f47486f78b9f04d55f"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Tue May 19 21:21:53 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 19 07:21:53 2026 -0600"
      },
      "message": "feat(dataframe): add writeJson with JsonWriteOptions (#61)"
    },
    {
      "commit": "fe4414a7f92eabca337682f47486f78b9f04d55f",
      "tree": "1a39ee49e57c3a27e55cef0ee54532cfbe5c39dd",
      "parents": [
        "333ce483d71fe6a8f3f102bb0231abe68451ff1c"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Tue May 19 12:22:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 18 22:22:20 2026 -0600"
      },
      "message": "feat(avro): expose Avro reader via registerAvro and readAvro (#60)"
    },
    {
      "commit": "333ce483d71fe6a8f3f102bb0231abe68451ff1c",
      "tree": "4cf683cb609df7b6386c8d675091d635c9fd6339",
      "parents": [
        "3d9e19f6b04df8a41fb41b8798c86f24b9a28d41"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Tue May 19 07:36:27 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 18 17:36:27 2026 -0600"
      },
      "message": "feat(dataframe): add executeStream(allocator) for incremental batch iteration (#51)"
    },
    {
      "commit": "3d9e19f6b04df8a41fb41b8798c86f24b9a28d41",
      "tree": "50237d4b9590a6fe41077e5e02dbe693516cbc92",
      "parents": [
        "8e6ab549b2c4fcd4fef6b372ca82b9220e766e35"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Tue May 19 07:27:11 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 18 17:27:11 2026 -0600"
      },
      "message": "feat(dataframe): add writeCsv with CsvWriteOptions (#53)"
    },
    {
      "commit": "8e6ab549b2c4fcd4fef6b372ca82b9220e766e35",
      "tree": "e8b5c33d418fd9830e46f1d07aefcd94abfccd3b",
      "parents": [
        "1a81099177ddf0bd9974a76c0291d20f40ac63e2"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Mon May 18 10:31:57 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 18 10:31:57 2026 -0600"
      },
      "message": "feat(udf)!: switch ScalarFunction.evaluate to ColumnarValue API (closes #62) (#64)"
    },
    {
      "commit": "1a81099177ddf0bd9974a76c0291d20f40ac63e2",
      "tree": "d9bfd75c1a529b0c252a36ca321a5b033c995670",
      "parents": [
        "dd5d6fc7f3442231540c4e18a65656c2929e8f81"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Mon May 18 13:13:03 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 17 23:13:03 2026 -0600"
      },
      "message": "feat(arrow): expose Arrow IPC reader via registerArrow and readArrow (#52)"
    },
    {
      "commit": "dd5d6fc7f3442231540c4e18a65656c2929e8f81",
      "tree": "d6761c513ea4ffdbc212297c9075016173c70af7",
      "parents": [
        "678eee128992dcd9399abd7c0df05a455087d86a"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Sun May 17 21:20:45 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 17 21:20:45 2026 -0600"
      },
      "message": "feat: add Java scalar UDF support (#46)"
    },
    {
      "commit": "678eee128992dcd9399abd7c0df05a455087d86a",
      "tree": "a3b00a1f46a8b9929c1953134a6a961412152675",
      "parents": [
        "63a86a588ab274a796784373d5d5519b9953b71c"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Mon May 18 05:20:33 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 17 15:20:33 2026 -0600"
      },
      "message": "feat(dataframe): expose withColumn and unnestColumns (#54)"
    },
    {
      "commit": "63a86a588ab274a796784373d5d5519b9953b71c",
      "tree": "d462fb866aa63c29d37f84dcaf796f267fea6c83",
      "parents": [
        "4a967e45af21456138a9b0f939504caee4ffbe53"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Mon May 18 05:00:28 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 17 15:00:28 2026 -0600"
      },
      "message": "feat(json): expose NdJsonReadOptions via registerJson and readJson (#47)"
    },
    {
      "commit": "4a967e45af21456138a9b0f939504caee4ffbe53",
      "tree": "95d980d606d9c1531d949061220fd8066b5e823a",
      "parents": [
        "2689011ea4fae33727a917d2d2cbbdde644db6e1"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Thu May 14 23:34:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 14 09:34:41 2026 -0600"
      },
      "message": "feat(builder): expose ConfigOptions.set/get as setOption / setOptions / getOption (#49)"
    },
    {
      "commit": "2689011ea4fae33727a917d2d2cbbdde644db6e1",
      "tree": "3fbbe4ec782336fe047b216afe49e809c995c665",
      "parents": [
        "60d5342831ea3c20c4a3f166743af833421c169c"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Wed May 13 16:08:31 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 16:08:31 2026 -0600"
      },
      "message": "docs: remove project-status checklist (#34)"
    },
    {
      "commit": "60d5342831ea3c20c4a3f166743af833421c169c",
      "tree": "7ca13e02cd8eb71c7fd5789a57dccb84a6294c57",
      "parents": [
        "be10e162fa2735b9970ffbeb378c4cb0cc61d064"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Wed May 13 15:52:05 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 15:52:05 2026 -0600"
      },
      "message": "build: add examples module on a multi-module Maven build (#32)\n\n## Which issue does this PR close?\n\n- Closes #.\n\n## Rationale for this change\n\nThe repository lacks runnable end-to-end examples. Code snippets in the\ndocs are easy to drift out of sync with the API: there is no build step\nthat fails when a public method is renamed or removed.\n\nAdding an `examples/` Maven module that depends on the library lets the\nreactor compile every example on each build, so they cannot fall behind\nthe API. Doing this requires the repo to be a multi-module Maven\nproject; while we\u0027re there, the parent POM gets shared\n`dependencyManagement` and plugin versions so child modules stay terse.\n\n## What changes are included in this PR?\n\n**Multi-module restructure:**\n\n- Root `pom.xml` becomes the parent (`datafusion-java-parent`,\n`packaging\u003dpom`) with `dependencyManagement` for arrow, protobuf, junit,\nand the library itself.\n- `core/` is a new directory holding the existing library\n(`datafusion-java`). `src/` moves to `core/src/`.\n- `examples/` is a new module (`datafusion-java-examples`) depending on\nthe library via `${project.version}`. It wires `exec-maven-plugin` so\neach example launches with the right `java.library.path` and\n`--add-opens` flags.\n- `native/`, `proto/`, `Makefile`, and `mvnw` stay at the repo root\nunchanged.\n- Surefire\u0027s `java.library.path` now uses\n`${maven.multiModuleProjectDirectory}` so it resolves under the reactor\nregardless of which module Maven is invoked from.\n- `apache-rat-plugin` runs only at the root\n(`\u003cinherited\u003efalse\u003c/inherited\u003e`); the rat exclude list is unchanged.\n\n**Three runnable examples** under\n`examples/src/main/java/org/apache/datafusion/examples/`:\n\n- `SqlQueryExample` — `registerCsv` + a SQL `GROUP BY` aggregation.\n- `DataFrameExample` — `readCsv` → `filter` / `select` /\n`withColumnRenamed` / `distinct` → `writeParquet(singleFileOutput)` →\n`readParquet` round-trip.\n- `ProtoPlanExample` — build a `LogicalPlanNode` directly via the\ngenerated protobuf classes and execute it through\n`SessionContext.fromProto`.\n\nEach example creates its own throwaway data in a temp dir and cleans up,\nso no external fixtures (TPC-H, etc.) are required.\n\n**Docs:** `docs/source/contributor-guide/development.md` is updated with\nthe new repo layout and a \"Running an example\" section that documents\nthe `./mvnw install -DskipTests` + `exec:exec` flow.\n\n## Are these changes tested?\n\n- The full JVM test suite (`./mvnw test`) still passes against the\nrelocated `core/src/test/` sources — 61 tests run, 0 failures (12\nskipped, same skip pattern as `main` when TPC-H data is absent).\n- Each example was executed end-to-end via `./mvnw -pl\n:datafusion-java-examples exec:exec` and produces expected output:\n  - `SqlQueryExample` prints `HIGH 3 215 / MEDIUM 1 60 / LOW 1 25`.\n- `DataFrameExample` prints a 3-row deduped table and `Round-tripped row\ncount: 3`.\n  - `ProtoPlanExample` prints `42  7`.\n- `spotless:check` and the reactor build are clean across all three\nmodules.\n\n## Are there any user-facing changes?\n\n- The published library artifact\n(`org.apache.datafusion:datafusion-java`) is unchanged — same `groupId`,\n`artifactId`, `version`, and package contents.\n- The repo layout changes: source paths move from `src/main/java/...` to\n`core/src/main/java/...`. IDE projects pointing at the old location need\nto re-import.\n- New `datafusion-java-examples` artifact exists but is marked\n`maven.install.skip\u003dtrue` / `maven.deploy.skip\u003dtrue` and is not intended\nfor distribution."
    },
    {
      "commit": "be10e162fa2735b9970ffbeb378c4cb0cc61d064",
      "tree": "968e5abd4fb4f0f0009eab5f773505accac34151",
      "parents": [
        "fe542086e61332bb7c7280176dbc6cdeead80e9e"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Wed May 13 15:41:45 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 15:41:45 2026 -0600"
      },
      "message": "docs: publish Javadoc as part of the User Guide (#31)"
    },
    {
      "commit": "fe542086e61332bb7c7280176dbc6cdeead80e9e",
      "tree": "47882329038c66788ef65ca27764f496a20303b0",
      "parents": [
        "9dacdc8ab394d9751adef72c86b35b1aa96e6678"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Wed May 13 15:27:37 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 15:27:37 2026 -0600"
      },
      "message": "feat(dataframe): add limit, distinct, dropColumns, withColumnRenamed (#30)"
    },
    {
      "commit": "9dacdc8ab394d9751adef72c86b35b1aa96e6678",
      "tree": "a7c7dfa005440ce4f97af5b6bbc328bc9d55035c",
      "parents": [
        "3698b9a1af9a741c5935a32de6aaa8e4a2947b69"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Wed May 13 13:00:55 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 13:00:55 2026 -0600"
      },
      "message": "refactor: pass csv and parquet read options via protobuf (#29)"
    },
    {
      "commit": "3698b9a1af9a741c5935a32de6aaa8e4a2947b69",
      "tree": "a560218532d154a69dba70ba9d7e14516b1ab887",
      "parents": [
        "423ff8a503ccdfeefaa7723bf3c55e965f2add32"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Wed May 13 10:44:15 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 10:44:15 2026 -0600"
      },
      "message": "feat: configure SessionContext and RuntimeEnv via builder (#28)"
    },
    {
      "commit": "423ff8a503ccdfeefaa7723bf3c55e965f2add32",
      "tree": "596a424c8f3d89e6ada051c3ba014f5a9f1f3b6f",
      "parents": [
        "598ae9e0029e3555281eefda3f3e73d9e414b71a"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Wed May 13 09:19:55 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 09:19:55 2026 -0600"
      },
      "message": "feat(write): add DataFrame.writeParquet with ParquetWriteOptions (#27)"
    },
    {
      "commit": "598ae9e0029e3555281eefda3f3e73d9e414b71a",
      "tree": "1d5a947ba6eb0009cff3114202eee299e5b2abd9",
      "parents": [
        "f61b10f99d15f566668364704bd5f576440d649d"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Wed May 13 08:19:38 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 08:19:38 2026 -0600"
      },
      "message": "ci: publish docs site to datafusion.apache.org/java/ (#26)"
    },
    {
      "commit": "f61b10f99d15f566668364704bd5f576440d649d",
      "tree": "1bbfb045fd75aca11c72ff02a4094c624f9c9461",
      "parents": [
        "a651d31e9fcc222fb294c1963df0e4081e67a761"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Wed May 13 07:54:42 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 07:54:42 2026 -0600"
      },
      "message": "docs: add Sphinx documentation site with user and contributor guides (#24)"
    },
    {
      "commit": "a651d31e9fcc222fb294c1963df0e4081e67a761",
      "tree": "c5cd209ee43bfe1531642f779019c3f99c37a03b",
      "parents": [
        "50885c6d176909c3ac1b7865d7e67299881cf8d0"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Wed May 13 07:33:16 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 07:33:16 2026 -0600"
      },
      "message": "docs: add GitHub issue and PR templates (#23)"
    },
    {
      "commit": "50885c6d176909c3ac1b7865d7e67299881cf8d0",
      "tree": "c791c2a23dce36afad831bf80043f3ff62421eda",
      "parents": [
        "ca7ebef1623546742fabcbfe3db914793be80813"
      ],
      "author": {
        "name": "Lantao Jin",
        "email": "jinlantao@gmail.com",
        "time": "Wed May 13 20:56:58 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 06:56:58 2026 -0600"
      },
      "message": "feat(csv): expose CsvReadOptions via registerCsv and readCsv (#21)"
    },
    {
      "commit": "ca7ebef1623546742fabcbfe3db914793be80813",
      "tree": "4242500e25b0d284099ece02f14343dd397af65b",
      "parents": [
        "757a078c3ed70c0627b29d6ccf081eaf281761bc"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Wed May 13 00:41:39 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 00:41:39 2026 -0600"
      },
      "message": "docs: replace roadmap with project-status checklist (#20)"
    },
    {
      "commit": "757a078c3ed70c0627b29d6ccf081eaf281761bc",
      "tree": "7adbf39695fba4fc32ffcfe163adb0721f9d13ef",
      "parents": [
        "717b735d3ac2204808c47448d600e487ac968b9c"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Wed May 13 00:33:54 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 00:33:54 2026 -0600"
      },
      "message": "feat(proto): execute Java-built protobuf plans via SessionContext (#13)"
    },
    {
      "commit": "717b735d3ac2204808c47448d600e487ac968b9c",
      "tree": "4538e6c2e1766731b591ca58ca931c262a61264b",
      "parents": [
        "233243cee6f8d5319135a99e9ac70948482b81ca"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Wed May 13 00:33:41 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 00:33:41 2026 -0600"
      },
      "message": "feat(dataframe): add select/filter/count/show methods (#19)"
    },
    {
      "commit": "233243cee6f8d5319135a99e9ac70948482b81ca",
      "tree": "8d81da7a8db97ffb039e0b02f80a5ca6bc340d03",
      "parents": [
        "1da32338c44eef5c5325290cc1a52eadf7cca0b3"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 12 23:51:34 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 23:51:34 2026 -0600"
      },
      "message": "feat(parquet): expose ParquetReadOptions via registerParquet and readParquet (#18)"
    },
    {
      "commit": "1da32338c44eef5c5325290cc1a52eadf7cca0b3",
      "tree": "3d84c2b7664f6f8635a577afb14ec4b262d30650",
      "parents": [
        "058840a4ab7362cdbe38b6d7fa4b03b60bc8955d"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 12 21:43:54 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 21:43:54 2026 -0600"
      },
      "message": "ci: replace disallowed third-party actions in build workflow (#16)"
    },
    {
      "commit": "058840a4ab7362cdbe38b6d7fa4b03b60bc8955d",
      "tree": "0c4173d12d647482b44d586ff1e9cb343b023183",
      "parents": [
        "5292e05c924a2b4125f2db66898e236dc969912b"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 12 21:35:18 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 21:35:18 2026 -0600"
      },
      "message": "ci: add build workflow that runs make test (#15)\n\n## Summary\n\n- Adds `.github/workflows/build.yml` running on pushes to `main` and on\nPRs targeting `main`.\n- Sets up Temurin JDK 17 and a stable Rust toolchain, caches Maven\n(`~/.m2`) and cargo (`native/target`) artifacts, then runs `make test`.\n\n## Rationale\n\nThe project currently has no CI: `format.yml` was removed in #7 to clear\na deadlock when GitHub Actions wasn\u0027t yet enabled, and #11 nulled out\nthe stale branch protection rules left behind. With Actions now in\nplace, we need at least one workflow that exercises the build on every\nPR so regressions surface before merge.\n\n`make test` is the canonical full build entry point documented in\n`README.md` and `CONTRIBUTING.md` — it depends on the `native` target\n(so it builds the Rust crate first) and then runs the JVM JUnit suite,\nwhich is exactly what CI needs to cover.\n\n## What\u0027s in this PR\n\n- `.github/workflows/build.yml`: single `build` job on `ubuntu-latest`,\nJDK 17 (Temurin) with Maven cache via `actions/setup-java`, Rust stable\nvia `dtolnay/rust-toolchain`, cargo cache via `Swatinem/rust-cache`\nscoped to the `native` workspace, then `make test`.\n\n## Not in this PR\n\n- Spotless / Apache RAT / clippy / `cargo fmt` checks. These run at\nMaven\u0027s `verify` phase or via separate cargo commands and aren\u0027t wired\ninto the Makefile yet; they can be added in a follow-up once we decide\nwhether to extend the Makefile or invoke them directly from CI.\n- Matrix builds across OS or JDK versions — start minimal, expand if\nneeded."
    },
    {
      "commit": "5292e05c924a2b4125f2db66898e236dc969912b",
      "tree": "7fb5f52b99934f23355dfe5d817f770bb36c7d4a",
      "parents": [
        "e412ab54e1ff8c1d9000afcb7c4d07b2b10ca1a7"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 12 20:16:52 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 20:16:52 2026 -0600"
      },
      "message": "feat(proto): generate datafusion-proto Java classes at build time (#9)"
    },
    {
      "commit": "e412ab54e1ff8c1d9000afcb7c4d07b2b10ca1a7",
      "tree": "5909c1155d57588807aa7f1965d84aa924aedac6",
      "parents": [
        "80eaf811bb0a36a27d57a022842b408728e0fa5c"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 12 20:12:12 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 19:12:12 2026 -0700"
      },
      "message": "chore(.asf.yaml): null out main branch protection to clear stale rules (#11)\n\n## Summary\n\n- Sets `github.protected_branches.main: ~` in `.asf.yaml`.\n\n## Rationale\n\nThe previous PR (#7) removed the `protected_branches` block entirely,\nbut ASF INFRA only applies settings that are present in `.asf.yaml` — it\ndoes not clear settings when keys are simply omitted. The required\nstatus checks (`Java (spotless)`, `Rust (cargo fmt)`) therefore remain\nconfigured on `main` and continue to block every PR, because the\nworkflow that would produce those check contexts is also gone.\n\nExplicitly setting `protected_branches.main` to YAML null (`~`) tells\nINFRA to clear the existing branch protection rules on `main`. Branch\nprotection can be reintroduced later once CI is in place."
    },
    {
      "commit": "80eaf811bb0a36a27d57a022842b408728e0fa5c",
      "tree": "c198554d82059db60ac7414af1ab9756ba0368f9",
      "parents": [
        "26a3b4ce69d58080b74685cebe4c5298d98f5269"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 12 19:58:07 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 18:58:07 2026 -0700"
      },
      "message": "chore: remove protected_branches block and format workflow (#7)\n\n## Summary\n\n- Removes the entire `protected_branches` block from `.asf.yaml`.\n- Removes `.github/workflows/format.yml`.\n\n## Rationale\n\nGitHub Actions has not yet been enabled on the apache repo, so the\n`Format` workflow ends in `startup_failure` on every run and never\nreports the `Java (spotless)` / `Rust (cargo fmt)` status checks.\nCombined with `protected_branches.main.required_status_checks` requiring\nthose contexts, PRs are unmergeable.\n\nThis change clears both sides of the deadlock: the protection block is\nremoved so future PRs aren\u0027t blocked, and the workflow is removed so\nwe\u0027re not carrying a check definition that can\u0027t run. Branch protection\nand CI can be reintroduced once Actions is enabled by INFRA and the\nproject\u0027s review/CI practices have stabilized."
    },
    {
      "commit": "26a3b4ce69d58080b74685cebe4c5298d98f5269",
      "tree": "2f555b963fc0ac2156c60962d0c05d0c6731c285",
      "parents": [
        "68bcdb605bc6cbe26a3736be1b4dafb930de001f",
        "4dab96887f43ae04b69053f1363c1dcca27f93d1"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 12 18:28:16 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 18:28:16 2026 -0600"
      },
      "message": "Merge pull request #1 from andygrove/initial-seed\n\nfeat: initial seed of Apache DataFusion Java bindings"
    },
    {
      "commit": "4dab96887f43ae04b69053f1363c1dcca27f93d1",
      "tree": "2f555b963fc0ac2156c60962d0c05d0c6731c285",
      "parents": [
        "e79dc7e4703ccb3877298d5cca4e76d683b4680a"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 12 18:20:41 2026 -0600"
      },
      "committer": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 12 18:20:41 2026 -0600"
      },
      "message": "refactor: extract native library name into constant\n"
    },
    {
      "commit": "e79dc7e4703ccb3877298d5cca4e76d683b4680a",
      "tree": "5db20a636123ecbbde4c8bedf6964c9753d485f1",
      "parents": [
        "7943e22c5acff76cc2602b72471f43a44d9d01ef"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 12 18:18:58 2026 -0600"
      },
      "committer": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 12 18:18:58 2026 -0600"
      },
      "message": "fix(native): restore datafusion default features and arrow ffi\n\nRe-enable datafusion\u0027s default features (parquet, sql) and add arrow\ndependency with the ffi feature so FFI_ArrowArrayStream, ctx.sql, and\nregister_parquet compile again.\n"
    },
    {
      "commit": "7943e22c5acff76cc2602b72471f43a44d9d01ef",
      "tree": "32ffc1e6e1b908ec6f445de3dcd6221b1ad7edcf",
      "parents": [
        "969d32e14c9ae9361f8778d8ab35c9faa35db297"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 12 18:14:55 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 18:14:55 2026 -0600"
      },
      "message": "Update native/Cargo.toml\n\nCo-authored-by: Oleks V \u003ccomphead@users.noreply.github.com\u003e"
    },
    {
      "commit": "969d32e14c9ae9361f8778d8ab35c9faa35db297",
      "tree": "5f17246ab53ebee5b864096af0460f961d8e1971",
      "parents": [
        "9e82551704e1020773b772689e1b6b099cc2e75a"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 12 17:38:02 2026 -0600"
      },
      "committer": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 12 17:38:02 2026 -0600"
      },
      "message": "chore: add .asf.yaml configuring repo metadata and branch protection\n"
    },
    {
      "commit": "9e82551704e1020773b772689e1b6b099cc2e75a",
      "tree": "700e73e4a6bf443ca3640141fb04c172c552bb7f",
      "parents": [
        "68bcdb605bc6cbe26a3736be1b4dafb930de001f"
      ],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 12 17:25:13 2026 -0600"
      },
      "committer": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 12 17:25:13 2026 -0600"
      },
      "message": "feat: initial seed of Apache DataFusion Java bindings\n\nSeed the project with a minimal end-to-end JNI binding from the JVM to\nApache DataFusion, plus the build, format, and license-check tooling\nneeded for ongoing contribution.\n\nJava surface (org.apache.datafusion):\n- SessionContext: AutoCloseable session, sql(String) returning a lazy\n  DataFrame, registerParquet(String, String) for registering local\n  Parquet files as SQL tables.\n- DataFrame: AutoCloseable, collect(BufferAllocator) executes the plan\n  and returns result batches as an Arrow ArrowReader via the Arrow C\n  Data Interface. collect() consumes the DataFrame; close() releases\n  the native plan if never collected.\n\nNative side (native/, crate datafusion-jni):\n- JNI entry points for SessionContext create/close/registerParquet/\n  createDataFrame and DataFrame collect/close.\n- Results are exported as FFI_ArrowArrayStream so the JVM reads batches\n  without per-row JNI crossings or row-by-row copies.\n\nBuild and contributor tooling:\n- pom.xml with Maven wrapper, JUnit 5, Arrow 19, JDK 17 toolchain.\n- apache-rat-plugin (license-header check) and spotless-maven-plugin\n  (google-java-format) both bound to the verify phase.\n- Makefile targets for native build, JVM build, test, clean, and TPC-H\n  SF1 test data generation via tpchgen-cli.\n- GitHub Actions workflow running spotless:check and cargo fmt --check\n  on push and pull_request to main.\n"
    },
    {
      "commit": "68bcdb605bc6cbe26a3736be1b4dafb930de001f",
      "tree": "9ad6bbf9aee204218f0c5f3326ba7cd7626e8921",
      "parents": [],
      "author": {
        "name": "Andy Grove",
        "email": "agrove@apache.org",
        "time": "Tue May 12 17:02:09 2026 -0600"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 17:02:09 2026 -0600"
      },
      "message": "Create README.md"
    }
  ]
}
