)]}'
{
  "log": [
    {
      "commit": "fa216fc7f021d7cf6640a34649a1e3366ba0af7e",
      "tree": "4acb262b734b2feee3e5861314ebfaa96ea45d33",
      "parents": [
        "2ea368439c60dcc40f3d7e9a50970f716b48de29"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Jul 24 13:38:19 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 13:38:19 2026 -0400"
      },
      "message": "Bump actions/setup-node from 6 to 7 (#846)\n\nBumps [actions/setup-node](https://github.com/actions/setup-node) from 6 to 7.\n- [Release notes](https://github.com/actions/setup-node/releases)\n- [Commits](https://github.com/actions/setup-node/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-node\n  dependency-version: \u00277\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "2ea368439c60dcc40f3d7e9a50970f716b48de29",
      "tree": "118a009e96e2659385859cc07efbfe778fc2a7cc",
      "parents": [
        "47199651bbb3ab47254c5ceff2d2ce1b13746462"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Thu Jul 23 00:49:26 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 23 00:49:26 2026 +0530"
      },
      "message": "[bug] Restore lombok-maven-plugin delombok execution for javadoc generation (#854)\n\n#728 accidentally removed the lombok-maven-plugin/delombok build execution.\nThe maven-javadoc-plugin (release profile) sources from ${delombok.output.dir},\nso without delombok that dir is empty and no -javadoc.jar is produced — a\nregression from 0.3.0. Restore the plugin (as in 0.3.0) so release builds\ngenerate javadoc jars again."
    },
    {
      "commit": "47199651bbb3ab47254c5ceff2d2ce1b13746462",
      "tree": "b4bbc75c5f54b85e7d60ce5bf3c75f828a7568c2",
      "parents": [
        "ec4b210cf4be47d5dfbaea1b72ac70f8d000a52e"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Wed Jul 22 04:41:10 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 22 04:41:10 2026 +0530"
      },
      "message": "[855] Fix release scripts: exclude xtable-service/examples + repair deploy_staging_jars.sh (#852)\n\n* [release] Exclude xtable-service/examples screenshots from source release tarball\n\n* [release] Fix deploy_staging_jars.sh: syntax, executable bit, disable build cache\n\nThe script had an unterminated quote (swallowing the install/deploy invocations)\nand referenced an undefined ${joined} under \u0027set -u\u0027; it was also not executable.\nThe Maven build cache (.mvn/extensions.xml) double-attaches the sources jar during\na release deploy (\u0027duplicated artifacts attached\u0027), so pass\n-Dmaven.build.cache.enabled\u003dfalse in the deploy options."
    },
    {
      "commit": "ec4b210cf4be47d5dfbaea1b72ac70f8d000a52e",
      "tree": "e7c98c9839397ab800efd301216fee1b1d58008b",
      "parents": [
        "4f301ce2afb3164563bd806cec631b7a76eabcdc"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Fri Jul 17 00:18:37 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 00:18:37 2026 +0530"
      },
      "message": "Add committer/PMC guidelines to the community website (#845)\n\n* Add committer/PMC guidelines to the community website\n\nDocument the path from contributor to committer and PPMC member,\ncovering contribution avenues, committer and PPMC criteria, and the\nnomination and voting process. Modeled on Apache Iceberg, Hudi, and\nSpark community guidelines and ASF conventions.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Add ASF adding-committers guide to references\n\nIncorporates the baseline reference raised in the dev-list discussion.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "4f301ce2afb3164563bd806cec631b7a76eabcdc",
      "tree": "188b162735ffdb65c65d8c308c4af4b71261bbcd",
      "parents": [
        "4daec2795e6ec1234f0d0c8aa05aadee0780b714"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Tue Jul 14 09:47:15 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 09:47:15 2026 +0530"
      },
      "message": "Mirror GitHub Discussions to dev@xtable.apache.org (#844)\n\nRoute the discussions notification stream to the dev mailing list so\nGitHub Discussion threads are reflected on lists.apache.org, matching\nthe convention used by other ASF projects (e.g. Apache Hudi). Commits,\nissues, and pull request notifications remain on commits@.\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "4daec2795e6ec1234f0d0c8aa05aadee0780b714",
      "tree": "0fd37cc51cc4cb1c4a95ce57a6bd2e656dc4f88c",
      "parents": [
        "a1a17b3754e8d9af678db6138ef32aa06a810f12"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Wed Jul 08 11:28:37 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 11:28:37 2026 +0530"
      },
      "message": "[736] Make the bundled xtable-utilities jar runnable again (#840)\n\nRunning the bundled utilities jar the way the docs describe\n(java -jar xtable-utilities_2.12-*-bundled.jar --datasetConfig config.yaml)\nfailed on a chain of NoClassDefFoundErrors, and syncing *to* Hudi was\nsilently skipped. Two upstream changes caused this: #822 replaced the\nmaven-shade \"bundle everything\" default with an explicit artifactSet\nallowlist, and the Hudi 1.x bump split hudi-common into hudi-common +\nhudi-io + hudi-hadoop-common.\n\nRuntime dependencies dropped from the shaded jar:\n\n  org.slf4j:slf4j-api                -\u003e org/slf4j/LoggerFactory\n  org.apache.hudi:hudi-hadoop-common -\u003e org/apache/hudi/hadoop/fs/HadoopFSUtils\n  org.apache.hudi:hudi-io            -\u003e (runtime transitive, not allowlisted)\n  org.openjdk.jol:jol-core           -\u003e org/openjdk/jol/info/GraphLayout  (#736)\n\nFixes:\n- Add slf4j-api, hudi-io and jol-core to the shade allowlist.\n- jol-core is pinned to test scope by the parent dependencyManagement, so\n  override it to runtime (Hudi\u0027s ObjectSizeCalculator loads it at runtime).\n- hudi-hadoop-common is only a provided/test transitive, so declare it as a\n  runtime dependency of the standalone bundle and allowlist it.\n- hudi-java-client was declared twice (compile + a redundant test-scoped\n  copy); Maven\u0027s last-declaration-wins downgraded it to test scope, so the\n  shade plugin excluded the Hudi write client (HoodieJavaEngineContext) and\n  RunSync skipped HudiConversionTarget. Remove the redundant test declaration\n  so the compile one takes effect and the write client is bundled.\n\nVerified end-to-end via java -jar against real tables:\n- Hudi (table v9, metadata table enabled) -\u003e Delta + Iceberg: reads the Hudi\n  metadata table (the ObjectSizeCalculator/jol path from this issue) and\n  reports \"Sync is successful for the following formats ICEBERG,DELTA\".\n- Iceberg -\u003e Hudi: writes a real Hudi table (.hoodie timeline with a\n  completed replacecommit) and reports \"Sync is successful ... HUDI\".\n\nCloses #736.\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "a1a17b3754e8d9af678db6138ef32aa06a810f12",
      "tree": "978ababd48af98d8481af978e3c9c7ddba37596a",
      "parents": [
        "4280b6085506bf1f6538e8a3b5234f5cec1f4efd"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Jul 05 21:40:00 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 05 21:40:00 2026 -0400"
      },
      "message": "Bump actions/checkout from 6 to 7 (#831)\n\nBumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/checkout\n  dependency-version: \u00277\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "4280b6085506bf1f6538e8a3b5234f5cec1f4efd",
      "tree": "0cdc4c261c97b12dc0da28f4f0d3ec3c3c83389d",
      "parents": [
        "244003d2d61f9371713c711236bb0cb0f1eda79a"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Tue Jun 30 07:34:07 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 30 07:34:07 2026 +0530"
      },
      "message": "[762] Upgrade hudi version in xtable (#772)\n\n* Upgrade hudi version in xtable\n\n* Fix hudi source tests\n\n* Fix few more tests\n\n* Fix more tests\n\n* Fix more tests-2\n\n* Remove zero row group test\n\n* Disable test for Paimon source, Hudi target and un-parittioned\n\n* Fix more tests-4\n\n* Fix more tests-5\n\n* Address self review comments and link GH issues for failing tests\n\n* Upgrade hudi to 1.2.0 and align spark/delta with main\n\nBump hudi.version 1.1.0 -\u003e 1.2.0 and migrate the 1.1 -\u003e 1.2 breaking API\nchanges:\n- Schema handling moved to HoodieSchema: HoodieAvroUtils.addMetadataFields -\u003e\n  HoodieSchemaUtils.addMetadataFields(HoodieSchema...); TableSchemaResolver\n  .getTableAvroSchema[FromLatestCommit]() -\u003e getTableSchema().toAvroSchema();\n  HoodieTableMetadataUtil.isColumnTypeSupported and HoodieAvroWriteSupport now\n  take HoodieSchema.\n- Timeline: HoodieTimeline.compareTimestamps/GREATER_THAN -\u003e InstantComparison;\n  HoodieInstant.getTimestamp() -\u003e requestedTime().\n- TimelineMetadataUtils.serializeCleanMetadata -\u003e serializeAvroMetadata.\n\nDrop the PR\u0027s incidental spark 3.4 -\u003e 3.5 and delta 2.4 -\u003e 3.0 bumps and keep\nmain\u0027s versions; hudi 1.2.0 publishes a spark3.4 bundle so the upgrade does not\nrequire spark 3.5. Reverts delta-spark -\u003e delta-core and the Delta 3.0 AddFile\nconstructor (extra Option args) back to the 2.4 signature.\n\nVerified: full mvn install builds all modules; ITConversionController passes\n(43 tests, 0 failures).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Fix hudi unit-test regressions from the 1.2.0 upgrade\n\n- TestHudiConversionSource: stub the 1.x metaclient APIs the HudiConversionSource\n  ctor/cleanup path now uses (getStorageConf/getBasePath via doReturn for the\n  StorageConfiguration\u003c?\u003e wildcard) and stub getActiveTimeline().readCleanMetadata\n  (1.x) instead of getInstantDetails + serialized bytes.\n- HudiFileStatsExtractor: hudi 1.2.0\u0027s column-stats reader reports array elements\n  with the parquet 3-level \"list.element\" path for both parquet footers and the\n  metadata table, so always normalize array naming (drop the obsolete\n  isReadFromMetadataTable branch) and collapse the now-identical name-\u003efield maps.\n- TestBaseFileUpdatesExtractor: temporarily disable the toString-based\n  assertWriteStatusesEquivalent (see BLOCKER comment) — Hudi 1.2.0\u0027s WriteStatus\n  toString embeds identity hashes and now serializes numInserts/recordsStats,\n  which both breaks string equality and exposes stale hand-rolled expectations.\n  To be replaced with a semantic comparison before merge.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Fix HoodieAvroWriteSupportWithFieldIds ctor for hudi 1.2.0\n\nHudi 1.2.0 reflectively instantiates the parquet write support with the schema\nas a HoodieSchema (HoodieAvroWriteSupport\u0027s ctor changed), so the field-id\nsubclass must mirror that signature. Take HoodieSchema directly and convert to\nAvro only where addFieldIdsToParquetSchema needs it. Fixes a\nNoSuchMethodException during writes (surfaced by ITRunSync.testContinuousSyncMode).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Hudi 1.2.0: gate col-stats to un-partitioned tables and fix partition ITs\n\n- HudiConversionTarget/HudiTestUtil: enable MDT col-stats only for\n  un-partitioned tables (avoids the partition-stats failure on externally\n  registered files) and keep the test write config in sync.\n- ITHudiConversionTarget: parameterize tests for partitioned and\n  un-partitioned tables; assert column stats only for the un-partitioned case.\n- ITConversionController: force eager file-index listing for the\n  timestamp-partitioned case (lazy listing fails to parse partition values in\n  1.2.0); comment out the nested partition-column case (nested_record.level),\n  which hits a Hudi 1.2 file-group-reader Avro schema limitation.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\nClaude-Session: https://claude.ai/code/session_01TLw5GgCgbeubWrULQJc28r\n\n* Exclude jetty-runner so Hudi 1.2 TimelineService gets jetty-util 9.4.x\n\nHive\u0027s hive-service (via xtable-hive-metastore) pulls in jetty-runner:9.3.20,\nan executable uber-jar that bundles stale Jetty 9.3.20 classes. Its\nScheduledExecutorScheduler lacks the (String, boolean, int) constructor, so it\nshadowed jetty-util:9.4.54 on the test classpath and broke Hudi 1.2\u0027s embedded\nTimelineService (NoSuchMethodError) in the xtable-utilities ITs\n(ITRunSync, ITRunCatalogSync). jetty-runner is unused here, so exclude it and\nlet the 9.4.x jetty-util with the required constructor be used.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\nClaude-Session: https://claude.ai/code/session_01TLw5GgCgbeubWrULQJc28r\n\n* Address review feedback: comment formatting, scala-version pom, remove default_hudi DB, link issues\n\n- HudiConversionTarget: rewrap col-stats comment cleanly, link #832\n  (new sub-issue of #762 for enabling col-stats on partitioned tables)\n- HudiTableManager: remove default_hudi DEFAULT_DATABASE_NAME workaround\n  (reverts to default DB behavior), link #762 on the v6-pin comment\n- xtable-hudi-support-extensions pom: restore _${scala.binary.version}\n\n* Restore default_hudi database name for Hudi target tables\n\nRemoving setDatabaseName(DEFAULT_DATABASE_NAME) regressed ITConversionController:\nunder Hudi 1.x the target table lands in the \"default\" database and a Spark\nread resolves it as the colliding Delta table (\"... is not a Hudi table\").\nRestore the dedicated database workaround; tracked in #774.\n\n* Derive Hudi target database name from the target namespace\n\nHudiTableManager hardcoded the database to default_hudi (a Hudi 1.x workaround\nfor the default-database Delta collision). Allow callers to supply a database:\nHudiConversionTarget now uses the first level of the target namespace\n(targetTable.getNamespace()[0]) as the database name, mirroring how the Iceberg\ntarget consumes the namespace, and falls back to default_hudi when none is set.\n\n* Revert IdTracker to single-path generateIdMappings, keep only the API swap\n\nThe updateIdMappings schema-evolution branch was not required by the Hudi 1.2.0\nupgrade: with main\u0027s single-path generateIdMappings and only the forced\nHoodieAvroUtils -\u003e HoodieSchemaUtils.addMetadataFields swap, the original\nTestIdTracker passes unchanged. updateIdMappings changed field-id assignment on\nschema evolution, which could shift ids for existing tables. Revert to main\u0027s\nbehavior so field ids stay stable; restore main\u0027s TestIdTracker expectations.\n\n* Add semantic WriteStatus comparison in TestBaseFileUpdatesExtractor\n\nHudi 1.2.0\u0027s WriteStatus#toString embeds per-instance identity state, so the\nold toString-set comparison can no longer be used. Replace it with a\nfield-by-field comparison of the WriteStat fields XTable populates\n(fileId/partitionPath/path/numWrites/numInserts/totalWriteBytes/fileSizeInBytes)\nand the per-column record stats (min/max/null/value/totalSize), keyed by the\ncolumn name embedded in each entry.\n\nRebuild the expected column stats to match production output for the input:\nonly the leaf scalar columns survive convertColStats, value counts are distinct\nper column (so a stat mapped to the wrong column is caught), and the column-stats\nindex is V1 for the pinned table version 6. Also set numInserts in the shared\ncreateWriteStatus helper and fix the partitioned test\u0027s file/stats assignment.\n\n* Tidy up comments in BaseFileUpdatesExtractor test\n\n* Enable col-stats tests at table version 6 and link #834\n\nThe column-stats index is V1 at table version 6, where Hudi\u0027s isColumnTypeSupported\nexcludes DECIMAL/FIXED columns (HUDI-8585), so a decimal column gets no col-stats.\nAlign TestHudiFileStatsExtractor to table version 6 (mocks set HoodieTableVersion.SIX)\nand assert 8 of 9 columns (decimal dropped), replacing the stale @Disabled. Parameterizing\nthese tests over table version 6/9 is tracked in #834. Also link #834 from the v6-pin\ncomments in HudiTableManager and HudiConversionTarget.\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "244003d2d61f9371713c711236bb0cb0f1eda79a",
      "tree": "1f2be5648e387c38117cc622b0f12afe4a1a6094",
      "parents": [
        "7c9d840c6caa028011a4ffae857f372e9ae6b0ee"
      ],
      "author": {
        "name": "Aleksandr Andreev",
        "email": "137277646+alealandreev@users.noreply.github.com",
        "time": "Mon Jun 22 22:52:24 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 23 01:22:24 2026 +0530"
      },
      "message": "fix(delta): null partition value for composite generated-column partitions (#828)\n\n* Fix composite partition value corruption when a component is missing\n\nDeltaPartitionExtractor#getSerializedPartitionValue joined the values of\na composite (generated column) partition with Collectors.joining(\"-\").\nWhen one of the component values was absent from the partition values\nmap, the missing value was rendered as the literal string \"null\",\nproducing a corrupted partition value such as \"2013-null-20\" that was\nthen fed to the date parser.\n\nReturn null when any component value is missing so the partition value\nresolves to null, consistent with the single-field branch that uses\ngetOrDefault(name, null). Added a regression test covering a composite\ngenerated-column partition with a missing component.\n\n* Apply composite partition null-component fix to Delta Kernel extractor\n\nDeltaKernelPartitionExtractor#getSerializedPartitionValue contained the\nsame composite (generated column) partition handling as the Spark-based\nDeltaPartitionExtractor: joining component values with\nCollectors.joining(\"-\") rendered a missing component as the literal\nstring \"null\", corrupting the partition value.\n\nApply the same fix here - return null when any component value is\nmissing - and add a regression test mirroring the one added for\nDeltaPartitionExtractor.\n\n* Strengthen Delta composite partition tests with null-source scenario\n\nThe composite (generated column) partition columns are all derived from\na single source column, so the realistic trigger for a missing component\nis a null source value, which makes every derived partition column null.\n\n- Reframe the DeltaPartitionExtractor and DeltaKernelPartitionExtractor\n  unit tests around that null-source case (all components null) instead\n  of an artificial single-missing-component map.\n- Add an integration test (ITDeltaConversionSource) that creates a Delta\n  table partitioned by year/month/day generated columns derived from a\n  nullable timestamp, inserts a row with a null timestamp, and verifies\n  the snapshot resolves the partition value to null. Without the fix this\n  reproduces the failure (ParseException on \"null-null-null\").\n\n* Address review feedback\n\n- Create the gen-col partitioned test table via the DeltaTable builder API\n  instead of CREATE TABLE SQL (Spark 3.4 rejects generated partition columns\n  via SQL), and use a named-column INSERT so generated columns are computed.\n- Drop misleading scalaMap alias in the kernel test.\n- Tighten comments.\n\n---------\n\nCo-authored-by: Aleksandr Andreev \u003cpersistentengineer.com\u003e\nCo-authored-by: Vinish Reddy \u003cvinishreddygunner17@gmail.com\u003e"
    },
    {
      "commit": "7c9d840c6caa028011a4ffae857f372e9ae6b0ee",
      "tree": "e7ddcdf3490ed4d27215c30a5170ab162efe5100",
      "parents": [
        "754fd270e6f0f74c089f6c64f5c386a6d67b05f1"
      ],
      "author": {
        "name": "Aleksandr Andreev",
        "email": "137277646+alealandreev@users.noreply.github.com",
        "time": "Sat Jun 06 23:34:35 2026 +0300"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 06 16:34:35 2026 -0400"
      },
      "message": "Preserve original cause in ReadException on close failure (#827)\n\nHudiDataFileExtractor.close() wrapped any failure from closing the\ntable metadata or file system view in a new ReadException without\npassing the caught exception as the cause. This discarded the original\nstack trace and root cause (e.g. I/O or permission errors), making such\nfailures hard to diagnose.\n\nPass the caught exception to the ReadException(message, Throwable)\nconstructor so the original cause is preserved in the exception chain."
    },
    {
      "commit": "754fd270e6f0f74c089f6c64f5c386a6d67b05f1",
      "tree": "30c5bb2b034075937cc32bc39bd2178cfb7a92c7",
      "parents": [
        "a4e729d61b9bebb048e415a047cb330c71e2d43d"
      ],
      "author": {
        "name": "Selim S.",
        "email": "80632333+sapienza88@users.noreply.github.com",
        "time": "Fri Jun 05 23:21:29 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 06 02:51:29 2026 +0530"
      },
      "message": "Parquet Incremental Sync (#768)\n\n* given a parquet file return data from a certain modification time\n\n* create the path based on the partition then inject the file to append into the parquet table\n\n* Handle case of path construction with file partitioned over many fields, interfacing with ConversionSource\n\n* test append Parquet file into table init\n\n* add function to test schema equivalence before appending\n\n* construct path to inject to based on partitions\n\n* fix imports\n\n* refactoring (lombok, logs, javadocs and function and approach commenting)\n\n* use appendFile to append a file into a table while tracking the appends using the FileStatus\u0027 modifTime attribute\n\n* find the files that satisfy to the time condition\n\n* treat appends as separate files to add in the target partition folder\n\n* update approach: selective block compaction\n\n* update approach: added a basic test to check data selection using modificationTime selector\n\n* fix append based on partition value\n\n* fix test with basic example where partitions are not considered\n\n* fix test with basic example where partitions are not considered2\n\n* fix test with basic example where partitions are not considered3\n\n* test with time of last append is now\n\n* test appendFile with Parquet: TODO test with multiple partitions 1) append and 2) filter for sync\n\n* merge recursively one partition files\n\n* fix paths for files to append\n\n* fix bug of appending file path\n\n* fix bug of schema\n\n* make sure returned files are non empty when iterating in the partitions\n\n* make sure returned files are non empty when iterating in the partitions 2\n\n* discard empty files when appending\n\n* discard empty files when appending\n\n* one spark session for both tests\n\n* bug fix\n\n* bug fix\n\n* cleanups + TODO: partitions match and merge\n\n* added test for many partitions, TODO integrate functions into ParquetConversionSource\n\n* selecting data bug fix, TODO integrate functions into ParquetConversionSource\n\n* run all tests, TODO integrate functions into ParquetConversionSource\n\n* run all tests, TODO integrate functions into ParquetConversionSource\n\n* spotless:apply, TODO integrate functions into ParquetConversionSource\n\n* bug fixes, TODO integrate functions into ParquetConversionSource\n\n* bug fixes, TODO integrate functions into ParquetConversionSource\n\n* handle lightweight metadata in the conversionSource\n\n* fix CI\n\n* fix CI, refactoring and isIncrementalSyncSafeFrom implementation\n\n* added test\n\n* added test: init conversionSource instance\n\n* added test: init conversionSource instance: fix error\n\n* added test: fix error\n\n* more tests + bug fixes and reformatting\n\n* CI fix\n\n* CI fix\n\n* CI fix\n\n* CI fix\n\n* CI fix\n\n* CI fix\n\n* merge ready fixes \u0026 tests + refactoring \u0026 reformatting\n\n* optimization: read metadata once for target file, read parquet files once, reformatting\n\n* Lazily fetch info, move state into ParquetDataManager\n\n* add TestParquetDataManager, simplify data manager methods\n\n* make IT parameterized, add incremental sync\n\n* fix schema extraction to fix snapshot sync\n\n* add optimizations\n\n* fix for ParquetDataManager Test (mock())\n\n* before resycing delete the first synced files metadata\n\n* in order to append parquet files, perform union then spark overwrite (not append)\n\n* solving directory issue when overwriting data using spark\n\n* solving directory issue when overwriting data using spark2\n\n* solving directory issue when overwriting data using spark3\n\n* solving directory issue when overwriting data using spark4\n\n* solving directory issue when overwriting data using spark5\n\n* solving directory issue when overwriting data using spark6\n\n* solving directory issue when overwriting data using spark7\n\n* revert writeData changes\n\n* solving directory issue when overwriting data using spark8\n\n* solving directory issue when overwriting data using spark9\n\n* solving directory issue when overwriting data using spark9\n\n* revert changes\n\n* testing without cleaning metadata for the second sync\n\n* testing without cleaning metadata for the second sync\n\n* testing without cleaning metadata for the second sync\n\n* testing without cleaning metadata for the second sync\n\n* testing without cleaning metadata for the second sync\n\n* revert changes\n\n* revert changes\n\n* revert changes\n\n* use no tempDir\n\n* revert changes\n\n* use union() to append data for the second sync()\n\n* use union() to append data for the second sync()\n\n* use union() to append data for the second sync()\n\n* use union() to append data for the second sync()\n\n* use union() to append data for the second sync() reverted\n\n* fix second sync error\n\n* fix second sync error\n\n* fix second sync error\n\n* fix second sync error\n\n* fix second sync error\n\n* fix second sync error\n\n* fix second sync error\n\n* fix second sync error\n\n* fix second sync error\n\n* fix second sync error\n\n* fix second sync error\n\n* remove old blocking tests\n\n* spotless:apply and more tests\n\n* spotless:apply and test fix\n\n* spotless:apply and test fix\n\n* spotless:apply and test fix\n\n* test fix\n\n* spotless\n\n* spotless imports\n\n* spotless imports\n\n* add syncMode Incr\n\n* revert changes\n\n* add syncMode Incr\n\n* spotless:apply\n\n* update naming\n\n* minimize diff with main\n\n* added test for tableChangeAddedFiles and changed path construction of ParquetDataManager and adjusted operator for mostRecentFile + spotless\n\n* added test for tableChangeAddedFiles and changed path construction of ParquetDataManager and adjusted operator for mostRecentFile + spotless + import error fixed\n\n* tests fixed\n\n* tests fixed\n\n* tests fixed\n\n* log for actual changes\n\n* log for actual changes\n\n* tests fixed\n\n* spotless\n\n* removed comment\n\n* spotless\n\n* address PR comments\n\n* fix path\n\n* add safety check around handling of out of sync targets with parquet source\n\n* Address review feedback: fetch parquet listing once; drop unused ParquetDataManager methods\n\n- ParquetConversionSource: materialize the file listing once per operation in\n  getTableChangeForCommit and getCurrentSnapshot instead of re-listing the\n  filesystem 2-3 times (addresses the \u0027fetch the list once\u0027 review comment).\n- ParquetDataManager: remove getParquetDataFileAt and\n  getParquetFilesMetadataAfterTime; both had no production caller (only tests).\n- TestParquetDataManager: drop tests for the removed methods and repoint the\n  real-filesystem tests to getCurrentFilesInfo.\n\n* Derive source identifier from the same listing as the table change\n\ngetTableChangeForCommit computed filesAdded and the table from one\nmaterialized listing but derived the committed sourceIdentifier from a\nseparate parquetDataManager.getMostRecentParquetFile() listing. A file\nlanding between the two listings could advance the committed identifier\npast a file that was never included in filesAdded, permanently skipping\nit on the next incremental sync.\n\nUse the most recent file from the same snapshot for both the table and\nthe source identifier. Add an assertion in ITParquetConversionSource\nthat the committed identifier matches that snapshot\u0027s latest mod time.\n\n---------\n\nCo-authored-by: Selim Soufargi \u003cssoufargi.idealab.unical@gmail.com~\u003e\nCo-authored-by: Timothy Brown \u003ctim@onehouse.ai\u003e\nCo-authored-by: Tim Brown \u003ctim@generalintuition.com\u003e\nCo-authored-by: Vinish Reddy \u003cvinishreddygunner17@gmail.com\u003e"
    },
    {
      "commit": "a4e729d61b9bebb048e415a047cb330c71e2d43d",
      "tree": "de670d5cc0001b32f2d635019bd10dfc426d85cf",
      "parents": [
        "305a67be24cf2a9f7dbfd595ad17fefe12ce210a"
      ],
      "author": {
        "name": "Rishi Reddy Bokka",
        "email": "brishi19791@gmail.com",
        "time": "Fri Jun 05 11:04:15 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 05 23:34:15 2026 +0530"
      },
      "message": "Fix map key path handling in Delta schema extractors (#826)\n\n* fix(delta): qualify nested map-key fields with MAP_KEY_FIELD_NAME (Spark + Kernel)\n\n* fix(delta-kernel): null-guard originalMetadata in BinaryType branch\n\n* ci: retrigger build"
    },
    {
      "commit": "305a67be24cf2a9f7dbfd595ad17fefe12ce210a",
      "tree": "77ce22e0b782b3c6427c8a316c93837c6fd92359",
      "parents": [
        "a5de2c16fdaaf5af7e9686119537a0aa9d12a51c"
      ],
      "author": {
        "name": "Vaibhav",
        "email": "kumarvaibhav1992@ymail.com",
        "time": "Tue Jun 02 02:55:04 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 02:55:04 2026 +0530"
      },
      "message": "Delta kernel conversion target (#801)\n\n* single commit\n\n* adding delta kernel\n\n* adding the test file\n\n* adding workable code for iteration over data\n\n* adding Kernel 4.0 code\n\n* adding the working code with xtable that check getcurrenttable\n\n* adding the dependecies\n\n* adding getcurrentsnapshot code\n\n* spotless fix\n\n* spotless fix 2\n\n* spotless fix 2\n\n* fixed partitioned test case\n\n* setting junit parallel execution to true\n\n* testInsertsUpsertsAndDeletes test case addition,internal datatype additions,big fixes\n\n* added the fix for table basepath listing wrong paths\n\n* added the fix for table basepath listing wrong paths\n\n* adding all tests\n\n* adding refactored code\n\n* spotless fix\n\n* fix change extraction\n\n* adding the commitbacklog test cases changes\n\n* adding a test case testConvertFromDeltaPartitionFormat\n\n* adding a test case testConvertFromDeltaPartitionFormat\n\n* adding the KernelPartitionExtractor test under kernel\n\n* commiting schema extractor and stats extrator\n\n* adding unit test cases with the request changes on the PR\n\n* spotless fix\n\n* spotless fix\n\n* adding haddop common in xtable service POM\n\n* changed map type to java and removed print commands\n\n* changed map type to java and removed print commands\n\n* removing hadoop common from xtable service\n\n* fixing POM\n\n* resolving some minor comments from review\n\n* changing constructor for Datafile extractor\n\n* add exclusion hadoop-client-runtime in POM\n\n* removing unused code and string comparison method\n\n* removing while True condition\n\n* Add Delta Kernel integration with disabled tests\n\n- Add DeltaKernelConversionTarget for writing to Delta tables\n- Add DeltaKernelDataFileUpdatesExtractor for incremental sync\n- Add TestDeltaKernelSync with comprehensive test coverage\n- Disable 8 tests due to Delta Kernel 4.0.0 _last_checkpoint bug\n- Update DeltaKernelSchemaExtractor with new schema conversion methods\n- Remove security manager argument from pom.xml for Java 11 compatibility\n\nTests disabled until Delta Kernel is upgraded to version with fix:\n- testCreateSnapshotControlFlow\n- testFileRemovalWithCheckpoint\n- testPrimitiveFieldPartitioning\n- testMultipleFieldPartitioning\n- testSourceTargetIdMapping\n- testSchemaEvolution\n- testGetTableMetadata\n- testFileRemoval\n\nAll disabled tests call getLatestSnapshot() which fails due to missing\n_last_checkpoint file created by PostCommitHook.threadSafeInvoke().\n\n* adding the conversion target files\n\n* corrected the test cases\n\n* spotless fix\n\n* adding read write integration test case\n\n* addressed comments over PR\n\n* addressed comments over PR\n\n* addressed comments over PR\n\n* adding data types\n\n* dummy commit to trigger actions\n\n* Apply spotless formatting to remove wildcard imports\n\nFixed wildcard imports in Delta Kernel test files to comply with\nspotless rules enforced in upstream commit 5c25674.\n\n* Fix missing imports after spotless wildcard removal\n\nThe spotless:apply command removed wildcard imports but didn\u0027t add\nback all necessary specific imports. Added missing imports:\n\nTestDeltaKernelReadWriteIntegration.java:\n- Static assertions (assertEquals, assertTrue, assertFalse, assertNotNull)\n- java.util.* (Random, UUID, List, Map, Set, Arrays, Collections, etc.)\n\nTestDeltaKernelSync.java:\n- Static assertions (including fail)\n- java.util.* (Random, UUID, List, Map, Set, Arrays, Collections, etc.)\n\nTestDeltaKernelDataFileUpdatesExtractor.java:\n- Static assertions (assertEquals, assertTrue, assertFalse, assertNotNull)\n- java.util.* (List, Arrays, Collections)\n\nAll tests now compile successfully.\n\n* adding read write integration test case\n\n* Fix exception handling, Scala/Java mixing, and test quality in Delta Kernel integration\n\n* added fixes\n\n* adding fixes\n\n* Enhance Delta Kernel test coverage with strict assertions and complex type tests\n\n- Enhanced TestDeltaKernelDataFileUpdatesExtractor with detailed AddFile content assertions\n- Added strict count verification (\u003d\u003d instead of \u003e\u003d) for differential sync tests\n- Fixed path format inconsistency (Hadoop URI vs plain string) in test files\n- Added 3 comprehensive tests for fromInternalSchema: nested records, lists, and maps\n- Simplified test code by inlining nested schema builds with clear structural comments\n- Fixed applyDiff signature and improved DeltaKernelDataFileUpdatesExtractor\n- Added DeltaKernelUtils.tableExists helper method\n- All 19 tests passing (16 schema + 3 data file updater tests)\n\nTest coverage now includes:\n- Multi-level nested structures (3 levels deep)\n- Lists of primitives and complex types\n- Maps of primitives and complex types\n- Round-trip conversions with complex types\n- Strict assertions on AddFile/RemoveFile actions\n\nCo-Authored-By: Claude Sonnet 4.5 \u003cnoreply@anthropic.com\u003e\n\n* Add Delta Kernel statistics support and refactor stats extraction\n\nThis commit adds column statistics support to DeltaKernelDataFileUpdatesExtractor\nand eliminates code duplication by extracting shared stats logic into a common utility.\n\n## Statistics Implementation\n\n- Add statistics support to DeltaKernelDataFileUpdatesExtractor\n- Implement convertToDataFileStatistics() using Delta Kernel 4.0.0 native API\n- Convert XTable ColumnStat to Delta Kernel DataFileStatistics (Column/Literal objects)\n- Support all stat types: BOOLEAN, DATE, DECIMAL, DOUBLE, INT, LONG, FLOAT, STRING, TIMESTAMP, TIMESTAMP_NTZ\n- Thread InternalSchema through call chain for stats conversion\n- Extract decimal precision/scale from schema metadata\n- Honor includeColumnStats flag to conditionally generate stats\n\n## Code Deduplication\n\n- Create DeltaStatsUtils with shared stats conversion logic (~300 lines)\n- Refactor DeltaStatsExtractor to delegate to DeltaStatsUtils (300 -\u003e 80 lines)\n- Refactor DeltaKernelStatsExtractor to delegate to DeltaStatsUtils (330 -\u003e 80 lines)\n- Eliminate ~600 lines of duplicate code between Delta Standalone and Delta Kernel\n- Single source of truth for Delta stats serialization/parsing\n\n## Test Improvements\n\n- Strengthen TestDeltaKernelDataFileUpdatesExtractor assertions\n  - Change weak assertTrue(size \u003e 0) to assertEquals(expectedSize, size)\n  - Verify exact value propagation for size and modification time\n- Fix resource leak in TestDeltaKernelSync.validateDeltaTable()\n  - Add try-with-resources for CloseableIterator instances\n\n## Verification\n\n- All 110 Delta unit tests pass\n- No breaking changes to public APIs\n- Code style checks pass\n- Build succeeds\n\nCo-Authored-By: Claude Sonnet 4.5 \u003cnoreply@anthropic.com\u003e\n\n* Address PR review feedback: fix thread-safety, validation, and code quality issues\n\nThis commit addresses multiple code review comments to improve thread-safety,\ndata validation, and overall code quality across Delta Kernel components.\n\nChanges:\n\n1. DeltaStatsUtils.java - Thread-safety and exception handling\n   - Replace HashSet with ConcurrentHashMap.newKeySet() for thread-safe\n     unsupportedStats collection (prevents race conditions)\n   - Replace RuntimeException with ParseException for domain-appropriate\n     error handling\n\n2. DeltaKernelActionsConverter.java - Code cleanup and path handling\n   - Remove misleading \u0027scalaMap\u0027 no-op variable renames\n   - Delete 3 deprecated methods with no callers (dead code):\n     * convertAddActionToInternalDataFile(AddFile, Table, ...)\n     * convertRemoveActionToInternalDataFile(RemoveFile, Table, ...)\n     * getFullPathToFile(String, Table)\n   - Fix fragile path prefix check using trailing separator to prevent\n     false matches (e.g., \"/foo\" matching \"/foobar/x.parquet\")\n\n3. DeltaKernelDataFileUpdatesExtractor.java - Remove test-only code\n   - Delete test-only 3-arg applySnapshot overload\n   - Add DECIMAL precision/scale validation - throw IllegalStateException\n     when metadata is missing instead of silently defaulting (prevents\n     stats corruption)\n\n4. DeltaKernelSchemaExtractor.java - Preserve column mapping and validate metadata\n   - Propagate delta.columnMapping.id in fromInternalSchema to prevent\n     ID loss during schema round-trips\n   - Add DECIMAL precision/scale validation in convertFieldType\n\n5. DeltaKernelStatsExtractor.java \u0026 DeltaStatsExtractor.java\n   - Add @Deprecated annotations to match Javadoc deprecation notices\n     (enables IDE/compiler warnings)\n\n6. TestDeltaKernelDataFileUpdatesExtractor.java\n   - Update tests to use 4-arg applySnapshot with null cachedSnapshot\n     to test production code path\n\nAll changes compile successfully and tests pass.\n\nCo-Authored-By: Claude Sonnet 4.5 \u003cnoreply@anthropic.com\u003e\n\n* spotless fix\n\n* Fix initialization and test quality issues in Delta Kernel implementation\n\n1. Fix double-initialization footgun in DeltaKernelConversionTarget\n   - Add guard in init() to throw IllegalStateException if called on\n     already-initialized instance (when engine !\u003d null)\n   - Prevents silent loss of custom Engine when mixing initialization patterns\n   - Documented in class-level Javadoc warning about pattern mixing\n\n2. Strengthen schema assertions in TestDeltaKernelReadWriteIntegration\n   - Replace weak size-based assertions with structural equality checks\n   - Use assertEquals(schema, readSchema) instead of comparing field counts\n   - Exposes real schema round-trip bugs: name changes (test_schema→struct,\n     int→integer), precision loss (MILLIS→MICROS), default value differences\n\n3. Fix static state pollution in DeltaStatsUtils\n   - Add clearUnsupportedStats() method for test isolation\n   - Thread-safety already correct (ConcurrentHashMap.newKeySet())\n   - Static mutable state caused cross-test pollution where test results\n     depended on execution order\n\n4. Add test cleanup in TestDeltaStatsExtractor\n   - Add @BeforeEach setUp() to call DeltaStatsUtils.clearUnsupportedStats()\n   - Ensures each test starts with clean slate for deterministic results\n\nAll core DeltaKernel tests pass. TestDeltaKernelReadWriteIntegration now\ncorrectly fails due to real schema conversion bugs (not regressions).\n\nCo-Authored-By: Claude Sonnet 4.5 \u003cnoreply@anthropic.com\u003e\n\n* Fix Delta Kernel schema round-trip normalization issues\n\nFixes TestDeltaKernelReadWriteIntegration failures caused by Delta Kernel\u0027s\nschema normalization behavior during round-trip conversions.\n\nChanges:\n1. DeltaKernelSchemaExtractor: Change INT type name from \"integer\" to \"int\"\n   - Delta Kernel uses IntegerType but the canonical name should be \"int\"\n   - Aligns with other primitive type naming (long, string, double, etc.)\n\n2. TestDeltaKernelReadWriteIntegration: Add schema normalization handling\n   - Add createSimpleSchema(boolean forComparison) overload\n   - When forComparison\u003dtrue, returns Delta-normalized schema:\n     * Schema name: \"struct\" (Delta always uses \"struct\" for StructType)\n     * Timestamp precision: MICROS (Delta Kernel always uses MICROS)\n     * Default values: NULL_DEFAULT_VALUE for nullable fields\n   - Update assertions to use normalized schema for comparison\n\n3. Test expectations updated across 3 test files:\n   - TestDeltaKernelSchemaExtractor: 12 occurrences\n   - TestDeltaKernelPartitionExtractor: 2 occurrences\n   - All expect \"int\" instead of \"integer\" for INT type schema name\n\nRoot cause: Commit bdd06de strengthened assertions from field count checks to\nfull schema equality, exposing pre-existing schema normalization bugs. This\nfix properly handles Delta Kernel\u0027s normalized representation.\n\nTest results: All 45 Delta Kernel tests pass (0 failures, 1 skipped)\n\nCo-Authored-By: Claude Sonnet 4.5 \u003cnoreply@anthropic.com\u003e\n\n* Simplify Delta Kernel commit action iterator\n\nReplace the hand-rolled anonymous CloseableIterator\u003cRow\u003e in\ncommitTransaction with the Delta Kernel helper\nUtils.toCloseableIterator(...), addressing the review nit about ~15\nlines of boilerplate. No behavior change.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Add feature flag to select Delta Kernel conversion target\n\nRegister DeltaKernelConversionTarget alongside the Delta Standalone\nDeltaConversionTarget (both report TableFormat.DELTA) and add a\nDeltaConversionTargetConfig flag, xtable.delta.target.use_kernel\n(default false), read from the target table\u0027s additional properties.\n\nConversionTargetFactory now disambiguates the two Delta implementations\nby this flag: off (default) resolves to the Standalone target unchanged,\non routes Delta syncs through the Kernel target. Non-Delta formats are\nunaffected. The single-arg createConversionTargetForName is retained as\na backward-compatible delegate.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Address review feedback on conversion target factory and stats extractors\n\n- Condense the createConversionTargetForName(String, Properties) Javadoc.\n- Rename isKernelTarget to isDeltaKernelTarget for clarity.\n- Drop the misleading @Deprecated from DeltaStatsExtractor and\n  DeltaKernelStatsExtractor; both are still the active stats extractors\n  for the Standalone and Kernel paths respectively.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Make Delta Kernel target usable via Hudi sync and add coverage\n\n- XTableSyncTool: read hoodie.xtable.delta.target.use_kernel and pass\n  xtable.delta.target.use_kernel through to the Delta target so the\n  Kernel writer can be selected from the Hudi sync path.\n- Fix DeltaKernelConversionTarget.getTableMetadata to return empty on a\n  first sync (catch TableNotFoundException) instead of failing when the\n  Delta table does not exist yet.\n- Add testSyncWithDeltaKernel covering unpartitioned and value-partition\n  syncs through the Kernel writer (timestamp/generated-column partitions\n  are unsupported by Delta Kernel 4.0.0 and excluded).\n- Add delta-kernel test deps where the ServiceLoader instantiates the\n  Kernel target (xtable-service, xtable-hudi-support-extensions).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Timothy Brown \u003ctim@onehouse.ai\u003e\nCo-authored-by: Claude Sonnet 4.5 \u003cnoreply@anthropic.com\u003e\nCo-authored-by: Vinish Reddy \u003cvinishreddygunner17@gmail.com\u003e"
    },
    {
      "commit": "a5de2c16fdaaf5af7e9686119537a0aa9d12a51c",
      "tree": "d73abe2efdbd9fce6de53229a86903bac769800c",
      "parents": [
        "f2ba892f718f654bf3831f0c35dfd406a74ab9cf"
      ],
      "author": {
        "name": "Tim Brown",
        "email": "tim@generalintuition.com",
        "time": "Mon Jun 01 11:18:51 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 01 20:48:51 2026 +0530"
      },
      "message": "Automate license file generation and validation (#822)\n\n* add include list\n\n* update license and notice files based on new dependencies, add script for generating these and for validation\n\n* add AGENTS.md\n\n* add license to agents.md\n\n* make table formats provided to illustrate diff\n\n* don\u0027t scan utilities for now\n\n* fix test dependencies\n\n* fix xtable-hudi-support-extensions\n\n* update service pom"
    },
    {
      "commit": "f2ba892f718f654bf3831f0c35dfd406a74ab9cf",
      "tree": "e736b1dca7d3b1533bd1204b27f0a868f3340b9e",
      "parents": [
        "634bcb6bded6ec7b01fde5af0ecab3f11278e2b5"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Sun Apr 12 05:27:19 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 12 05:27:19 2026 +0530"
      },
      "message": "Fallback to parquet footers when metadata table col stats are missing (#818)"
    },
    {
      "commit": "634bcb6bded6ec7b01fde5af0ecab3f11278e2b5",
      "tree": "4ef01d5f007d75c795b67222d75fbb90a2a86a83",
      "parents": [
        "2ae964266d587e33d7e1b6bf8b22356afaac7341"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Sun Apr 12 05:26:53 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 12 05:26:53 2026 +0530"
      },
      "message": "[bug] Fix batch INSERT_OVERWRITE replacecommits dropping adds in HudiDataFileExtractor (#816)"
    },
    {
      "commit": "2ae964266d587e33d7e1b6bf8b22356afaac7341",
      "tree": "0868955c88094b2a8822a3f29ed79fc4bcd90663",
      "parents": [
        "62453c7e9d6d0fe771e45df975c4fe5ab93dc09f"
      ],
      "author": {
        "name": "Alex R",
        "email": "arheebikes@gmail.com",
        "time": "Wed Apr 08 09:57:03 2026 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 22:27:03 2026 +0530"
      },
      "message": "Handle empty EarliestCommitToRetain (#732)\n\n* handle empty EarliestCommitToRetain\n\n* Fix build failures: qualify GREATER_THAN and fix test mocks\n\n* Use PathBasedPartitionSpecExtractor to align with main branch rename\n\n---------\n\nCo-authored-by: Vinish Reddy \u003cvinish@apache.org\u003e"
    },
    {
      "commit": "62453c7e9d6d0fe771e45df975c4fe5ab93dc09f",
      "tree": "d390755210ef213674b06bd7df72dbb6e42cbb48",
      "parents": [
        "c0205955967d0d859f2d4424e152885dbe203387"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Apr 08 06:08:46 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 06:08:46 2026 +0530"
      },
      "message": "Bump actions/setup-node from 5 to 6 (#753)\n\nBumps [actions/setup-node](https://github.com/actions/setup-node) from 5 to 6.\n- [Release notes](https://github.com/actions/setup-node/releases)\n- [Commits](https://github.com/actions/setup-node/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-node\n  dependency-version: \u00276\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "c0205955967d0d859f2d4424e152885dbe203387",
      "tree": "4b9f69b2880b85c88bd263aa419c214295a4767a",
      "parents": [
        "f991e315407b68f31324503fec465a95632ffc3b"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Sat Apr 04 02:56:17 2026 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 04 02:56:17 2026 +0530"
      },
      "message": "Enable Delta checkpoint CRC exception throwing by default (#817)\n\nSet spark.databricks.delta.checkpoint.exceptionThrowing.enabled\u003dtrue in\nDeltaConversionUtils so that Delta CRC integrity failures surface as\nexceptions rather than being silently swallowed during checkpoint reads."
    },
    {
      "commit": "f991e315407b68f31324503fec465a95632ffc3b",
      "tree": "506f96642b82391d2b63eee0519e02005979c18e",
      "parents": [
        "430756556a24e3b3714477d33a74d1cc21b80f45"
      ],
      "author": {
        "name": "Tim Brown",
        "email": "tim@onehouse.ai",
        "time": "Mon Feb 23 11:40:07 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 23 14:40:07 2026 -0500"
      },
      "message": "[bug] Parquet Source: snapshot sync fails on multiple commits with partitions (#806)\n\n* make 2 commits, cleanup testing\n\n* fix imports\n\n* reduce diff\n\n* address comments"
    },
    {
      "commit": "430756556a24e3b3714477d33a74d1cc21b80f45",
      "tree": "354aa2fced519c2fb12d1df38932e58b283b04c9",
      "parents": [
        "5c25674bf5e622462a27c4198f0f51ba3e09f555"
      ],
      "author": {
        "name": "Tim Brown",
        "email": "tim@onehouse.ai",
        "time": "Mon Feb 23 10:55:29 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 23 13:55:29 2026 -0500"
      },
      "message": "Parquet source: Expand column stats support, fix bugs in schema conversion (#805)\n\n* fix stats extraction to be per file and handle more types\n\n* fix list and map handling\n\n* cleanup\n\n* spotless\n\n* address comments, set null count, handle null stats\n\n* remove more unused variables"
    },
    {
      "commit": "5c25674bf5e622462a27c4198f0f51ba3e09f555",
      "tree": "cb735bab1dd01bdd99aae57520977c82cfce0c5c",
      "parents": [
        "fe7215e26151cbd4608a577bd04f47719f34e21d"
      ],
      "author": {
        "name": "Tim Brown",
        "email": "tim@onehouse.ai",
        "time": "Mon Feb 23 09:59:36 2026 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Feb 23 12:59:36 2026 -0500"
      },
      "message": "Remove wildcard imports and enforce with spotless (#809)\n\n* remove wildcard imports and enforce\n\n* undo removal\n\n* fix import\n\n* update xtable-service module"
    },
    {
      "commit": "fe7215e26151cbd4608a577bd04f47719f34e21d",
      "tree": "12c7683a9c72493e2007eea57c6f6fadccd122c5",
      "parents": [
        "abbf4b72a0910719246de5f81a74777f43b53ecd"
      ],
      "author": {
        "name": "Kevin Liu",
        "email": "kevinjqliu@users.noreply.github.com",
        "time": "Sun Feb 22 16:18:03 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Feb 22 16:18:03 2026 -0500"
      },
      "message": "add .sdkmanrc to .gitignore (#793)\n\n* add .sdkmanrc\n\n* Apply suggestion from @kevinjqliu"
    },
    {
      "commit": "abbf4b72a0910719246de5f81a74777f43b53ecd",
      "tree": "e130f6625dd8db2704fcbcfe31698a43c6afb334",
      "parents": [
        "8e583674151aa341010154b7cc7066f098e3cded"
      ],
      "author": {
        "name": "Nicolas Paris",
        "email": "nicolas.paris@riseup.net",
        "time": "Sat Feb 21 00:45:10 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 20 18:45:10 2026 -0500"
      },
      "message": "fix(iceberg): nested comments with qualified name (#797)\n\n* fix(iceberg): nested comments with qualified name\n\n* add ut"
    },
    {
      "commit": "8e583674151aa341010154b7cc7066f098e3cded",
      "tree": "fc4ea269d5321074b433a02512e3171d2f6a7850",
      "parents": [
        "8cab6a299b869b644beeb0ced5386627541e9f43"
      ],
      "author": {
        "name": "Rishi Reddy Bokka",
        "email": "brishi19791@gmail.com",
        "time": "Fri Feb 20 18:44:15 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Feb 20 18:44:15 2026 -0500"
      },
      "message": "Remove redundant getSnapshotAt calls per commit (#791)\n\n* Removed redundant delta calls\n\n* remove redundant deltalog call\n\nCo-authored-by: Kevin Liu \u003ckevinjqliu@users.noreply.github.com\u003e\n\n* Add Javadoc and input validation to DeltaTableExtractor.table(Snapshot, String)\n\n---------\n\nCo-authored-by: Kevin Liu \u003ckevinjqliu@users.noreply.github.com\u003e"
    },
    {
      "commit": "8cab6a299b869b644beeb0ced5386627541e9f43",
      "tree": "6e8cb768879bc4abaa168695943a16401a3b51c3",
      "parents": [
        "559a951857bc5804a732e606b53c69b0dc2f8fca"
      ],
      "author": {
        "name": "Nicolas Paris",
        "email": "nicolas.paris@riseup.net",
        "time": "Thu Feb 12 05:02:40 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 11 23:02:40 2026 -0500"
      },
      "message": "fix(delta): avoid NPE for binary in map/array schemas (#795)\n\n* fix(delta): avoid NPE for binary in map/array schemas\n\n* add ut"
    },
    {
      "commit": "559a951857bc5804a732e606b53c69b0dc2f8fca",
      "tree": "e276709ba8801f57a4110863c0f00ef598cf5bdc",
      "parents": [
        "b8fce01b8cbed3cbc30525bf56718fbe58a52f2c"
      ],
      "author": {
        "name": "Kevin Liu",
        "email": "kevinjqliu@users.noreply.github.com",
        "time": "Sun Feb 01 10:26:57 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Feb 01 10:26:57 2026 -0500"
      },
      "message": "Upgrade Iceberg to 1.9.2 and Avro to 1.12.0 (#784)\n\n* upgrade to iceberg 1.10.1\n\n* api changes\n\n* use best available iceberg-hive-runtime\n\n* upgrade avro version\n\n* to run with java 17\n\n* tests\n\n* fix avro\n\n* dont change notebook\n\n* fix tests\n\n* use iceberg 1.9.2\n\n* unnecessary changes\n\n* address ci issue\n\n* fix version in LICENSE\n\n* try revert\n\n* add back avro schema change\n\n* fix ci concurrency\n\n* mvn spotless:apply"
    },
    {
      "commit": "b8fce01b8cbed3cbc30525bf56718fbe58a52f2c",
      "tree": "0888687ddad20c8fb717c797aa7b48c5158c530b",
      "parents": [
        "7a1c5b1a1b1c834ff088465b08333f289b1d7cfa"
      ],
      "author": {
        "name": "Tim Brown",
        "email": "tim@onehouse.ai",
        "time": "Mon Jan 26 15:27:22 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jan 26 15:27:22 2026 -0500"
      },
      "message": "fix scope of spark catalyst in utilities bundle (#790)\n\n"
    },
    {
      "commit": "7a1c5b1a1b1c834ff088465b08333f289b1d7cfa",
      "tree": "2b4a83bffc2164244ee6cc5a33510eedadbdffb0",
      "parents": [
        "50ae6116788cb792db2997969076f0702e8a40ab"
      ],
      "author": {
        "name": "Mao",
        "email": "1684060+mao-liu@users.noreply.github.com",
        "time": "Tue Jan 20 05:54:05 2026 +1100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jan 19 13:54:05 2026 -0500"
      },
      "message": "[755] Support column stats for paimon (#767)\n\n* paimon: wip column stats\n\n* paimon column stats: fix tests\n\n* paimon: fixing some tests\n\n* paimon: fixing more tests\n\n* paimon: fix column stats column checks\n\n* paimon: stats: handling timestamp as long\n\n* paimon: add to xtable-utilities\n\n* paimon: lint\n\n* paimon: ticked version to 1.3.1\n\n* paimon: reducing logging\n\n* paimon: annotating assumptions with comments\n\n* paimon: expanded tests for stats extractor\n\n* paimon: stats extractor to its own class\n\n* paimon: handling deleted stats\n\n* paimon: spotless\n\n* paimon: fix tests\n\n* paimon: tests remove wildcard imports\n\n* paimon: assumptions validated\n\n* paimon: code review changes\n\n* paimon: added test case for lack of stats for complex fields\n\n* paimon: extended tests and updated test TODO with github issue reference\n\n* paimon: fix tests\n\n* pin catalyst version\n\n* paimon: fix tests in xtable-utilities\n\n---------\n\nCo-authored-by: Timothy Brown \u003ctim@onehouse.ai\u003e"
    },
    {
      "commit": "50ae6116788cb792db2997969076f0702e8a40ab",
      "tree": "f2592d4be6c23a02fbb8336823db3fb9b5c25318",
      "parents": [
        "f9ee9489592c37a60ebb3efd21f36b1f3b02f23e"
      ],
      "author": {
        "name": "Tim Brown",
        "email": "tim@onehouse.ai",
        "time": "Fri Jan 16 16:17:47 2026 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jan 16 16:17:47 2026 -0500"
      },
      "message": "[787] Add maven wrapper for consistent builds (#788)\n\n* add a maven wrapper for consistent builds\n\n* update readme and docs to prefer mvnw for consistent builds\n\n* update more mvn usage\n\n* update deploy_staging_jars"
    },
    {
      "commit": "f9ee9489592c37a60ebb3efd21f36b1f3b02f23e",
      "tree": "9b9ce4381d8fc4fe2330f12ce1d559f05826f9a4",
      "parents": [
        "81af6e294041ec46cd30cd2796b8ab20647b541a"
      ],
      "author": {
        "name": "Mike Dias",
        "email": "mike.rodrigues.dias@gmail.com",
        "time": "Tue Jan 06 14:29:14 2026 +1100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jan 05 22:29:14 2026 -0500"
      },
      "message": "Implement Paimon Source Incremental Sync (#780)\n\n* Implement Paimon Incremental Sync\n\n* Spotless apply\n\n* Code review improvements\n\n* Spotless apply"
    },
    {
      "commit": "81af6e294041ec46cd30cd2796b8ab20647b541a",
      "tree": "d478814389ecc5b70a55073d45823b4dd466faa6",
      "parents": [
        "22f4026f00b05069e952d7bfbefee7dda10d79c3"
      ],
      "author": {
        "name": "Xingrong Chen",
        "email": "56777910+xr-chen@users.noreply.github.com",
        "time": "Mon Dec 29 07:58:49 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Dec 29 10:58:49 2025 -0500"
      },
      "message": "Fix Delta to Iceberg not working on column mapping enabled Delta source table (#766)\n\n* Fix Iceberg duplicate field id in converted schema\n\n* Traverse the whole schema before converting, add test for the whole conversion process\n\n* update name mapping in the target Iceberg to read values from correct parquet columns\n\n* Add comments for physical field name and add more fields for schema extraction test\n\n* reset id to name mapping before extraction\n\n* Update name mapping in one place\n\n* update comments\n\n* Create schema extractor per conversion, add test cases for schema evolution\n\n* Add adding columns case for schema evolution test\n\n* recreate the name mapping when source schema contains field IDs\n\n* Wrap single line if statement, add default case for switch, update name mapping only when schema changed\n\n* update comments\n\n* add comments for setNameMapping\n\n* Update name mapping setting function name and comments"
    },
    {
      "commit": "22f4026f00b05069e952d7bfbefee7dda10d79c3",
      "tree": "7020d057673b95bd04a1c88fb42b06bb18bcfb3a",
      "parents": [
        "64f38b813291747a5aecff14664a19354ee02d60"
      ],
      "author": {
        "name": "Hanzhi Wang",
        "email": "hanzhi@apple.com",
        "time": "Wed Dec 17 06:49:13 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 17 09:49:13 2025 -0500"
      },
      "message": "Delta source: extract nested field\u0027s stats (#769)\n\nCo-authored-by: Hanzhi Wang \u003chanzhi_wang@apple.com\u003e"
    },
    {
      "commit": "64f38b813291747a5aecff14664a19354ee02d60",
      "tree": "1a0fd667582790abbfab9de1846a09e18b7c439e",
      "parents": [
        "04ae0d6f9ae1f2c6c77e36515bd8e792c78c20fe"
      ],
      "author": {
        "name": "vaibhavk1992",
        "email": "kumarvaibhav1992@ymail.com",
        "time": "Wed Dec 03 20:44:16 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Dec 03 10:14:16 2025 -0500"
      },
      "message": "Delta Kernel Draft PR (#729)\n\n* single commit\n\n* adding delta kernel\n\n* adding the test file\n\n* adding workable code for iteration over data\n\n* adding Kernel 4.0 code\n\n* adding the working code with xtable that check getcurrenttable\n\n* adding the dependecies\n\n* adding getcurrentsnapshot code\n\n* spotless fix\n\n* spotless fix 2\n\n* spotless fix 2\n\n* fixed partitioned test case\n\n* setting junit parallel execution to true\n\n* testInsertsUpsertsAndDeletes test case addition,internal datatype additions,big fixes\n\n* added the fix for table basepath listing wrong paths\n\n* added the fix for table basepath listing wrong paths\n\n* adding all tests\n\n* adding refactored code\n\n* spotless fix\n\n* fix change extraction\n\n* adding the commitbacklog test cases changes\n\n* adding a test case testConvertFromDeltaPartitionFormat\n\n* adding a test case testConvertFromDeltaPartitionFormat\n\n* adding the KernelPartitionExtractor test under kernel\n\n* commiting schema extractor and stats extrator\n\n* adding unit test cases with the request changes on the PR\n\n* spotless fix\n\n* spotless fix\n\n* adding haddop common in xtable service POM\n\n* changed map type to java and removed print commands\n\n* changed map type to java and removed print commands\n\n* removing hadoop common from xtable service\n\n* fixing POM\n\n* resolving some minor comments from review\n\n* changing constructor for Datafile extractor\n\n* add exclusion hadoop-client-runtime in POM\n\n* removing unused code and string comparison method\n\n* removing while True condition\n\n---------\n\nCo-authored-by: Timothy Brown \u003ctim@onehouse.ai\u003e"
    },
    {
      "commit": "04ae0d6f9ae1f2c6c77e36515bd8e792c78c20fe",
      "tree": "46e3e39fd71f34c29a96c115df31b814901b6331",
      "parents": [
        "85220ece8ce87194d54f02f66c3dc6e8ac608b00"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Sun Nov 23 18:21:43 2025 -0500"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Nov 23 18:21:43 2025 -0500"
      },
      "message": "Bump actions/checkout from 5 to 6 (#761)\n\nBumps [actions/checkout](https://github.com/actions/checkout) from 5 to 6.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v5...v6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/checkout\n  dependency-version: \u00276\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "85220ece8ce87194d54f02f66c3dc6e8ac608b00",
      "tree": "f55e420ecd73af85f99b313af332b081179455c1",
      "parents": [
        "8cceec7169012ee2cde2b9f1a72dfb49dc51588c"
      ],
      "author": {
        "name": "Rishi Reddy Bokka",
        "email": "brishi19791@gmail.com",
        "time": "Wed Nov 19 14:52:51 2025 -0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 19 14:52:51 2025 -0800"
      },
      "message": "Handle empty Iceberg table source in conversion (#756)\n\n* Handle empty Iceberg table source in conversion\n\n* applied spotless"
    },
    {
      "commit": "8cceec7169012ee2cde2b9f1a72dfb49dc51588c",
      "tree": "3e1df4fbf4c8e6ad7532cd80d98750a31f7125a7",
      "parents": [
        "93d4d27c9e508508400a8b7985dd3bf40c2488bd"
      ],
      "author": {
        "name": "Mike Dias",
        "email": "mike.rodrigues.dias@gmail.com",
        "time": "Thu Nov 06 09:30:23 2025 +1100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Nov 05 16:30:23 2025 -0600"
      },
      "message": "Paimon Source Support (#742)\n\n* Paimon initial support\n\n# Conflicts:\n#\txtable-api/src/main/java/org/apache/xtable/model/storage/TableFormat.java\n#\txtable-core/src/test/java/org/apache/xtable/GenericTable.java\n#\txtable-core/src/test/java/org/apache/xtable/ITConversionController.java\n\n* Expanding imports and removing java 11 target\n\n* fix compilation issue\n\n* Add Paimon Unit Tests\n\n* Addressing review comments\n\n* Fix test\n\n* Parameterizing timestamp precison tests\n\n* Fix timestamp precision metadata\n\n* Fixing tests by removing the paimon catalog config in spark"
    },
    {
      "commit": "93d4d27c9e508508400a8b7985dd3bf40c2488bd",
      "tree": "38dc961294bf277ae803e96ca9ba40858bfb64dc",
      "parents": [
        "bb548f307e7a2ee9cb40fe728a8dd0f3f8d5084f"
      ],
      "author": {
        "name": "Tim Brown",
        "email": "tim@onehouse.ai",
        "time": "Wed Oct 08 15:16:39 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 08 15:16:39 2025 -0400"
      },
      "message": "[750] Fix schema sync for Iceberg tables (#749)\n\n* fix initial schema sync\n\n* update sync schema\n\n* spotless\n\n* update run sync to hit field ID case\n\n* add basic unit test, fix test expectation\n\n* style"
    },
    {
      "commit": "bb548f307e7a2ee9cb40fe728a8dd0f3f8d5084f",
      "tree": "90c5f93c0cefdc2ce0dcc9dd445d1b53c6f0c5e0",
      "parents": [
        "95e75f9d580e81f4611a88635735feee9023f660"
      ],
      "author": {
        "name": "Piyush Dubey",
        "email": "piyushdubey07@gmail.com",
        "time": "Tue Sep 23 16:22:07 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 24 01:52:07 2025 +0530"
      },
      "message": "[LICENSE] Remove duplicate entry for org.javassist:javassist:3.25.0-GA (#717) (#745)\n\n"
    },
    {
      "commit": "95e75f9d580e81f4611a88635735feee9023f660",
      "tree": "223eb28122f777e48d3643e0e6459abc4b8a0502",
      "parents": [
        "f43352b7fbcc483c3edddf7059c3eb855d08f58d"
      ],
      "author": {
        "name": "Selim Soufargi",
        "email": "80632333+unical1988@users.noreply.github.com",
        "time": "Mon Sep 15 03:02:04 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 14 21:02:04 2025 -0400"
      },
      "message": "[553] parquet source with partition extraction (#728)\n\n* First attempt at parquet source with partition extraction\n\n* refactored conversion source for reading parquetFiles once to getCurrentSnapshot()\n\n* file changes + refactoring of conversion source\n\n* cleanup\n\n* implement get commit identifier\n\n* Hudi Source Config uses PartitionFieldSpec.java\n\n* Hudi Source Config uses PartitionFieldSpec.java bug fix\n\n* refactoring for PartitionValueExtractor to use Hudi based related code\n\n* aligning ConversionSource tests to include Parquet\n\n* implemented remaining parquetSource methods + refactoring, TODO tests\n\n* default case as an exception for finding parquet files + javadocs for PartitionFieldSpec + no file diffs removed files\n\n* refactoring for specExtractor\n\n* table changes update does not check if table exists already\n\n* added test for conversion source\n\n* adjusted test for Hudi after update of HudiSourceConfig\n\n* fixed test bug for parquet and added partitionValues for statsExtractor\n\n* fixed test bug for stats extractor by defining instance obj instead of using static function\n\n* now using a string for the partition format input\n\n* conversion source const for the test using specExtractor\n\n* adjusted conversionSourceProvider for partition init\n\n* adjusted table creation with Spark for Parquet\n\n* fix tests for CI to pass\n\n* fix tests for CI to pass (reverted)\n\n* cleanups\n\n* parquet files collected in a stream now for memory issue\n\n* fixing CI error on partition config in tests\n\n* seperate test class for parquet source\n\n* adjusting pom config for Actions\n\n* tests hitting the source, needs to create the parquet files locally in the test through Spark\n\n* creating parquet files before Testing\n\n* test bug fix\n\n* cleanups\n\n* TODO implement class for test\n\n* TODO check why sync fails to all 3 formats\n\n* sourceField bug not null OK, sync failing on stat generation from InternalType\n\n* highlighting sync errors related to stats and partition fields\n\n* partition config read from the test class + cleanups\n\n* augmenting InternalSchema with the partitionField to get SourceField non-null\n\n* HudiSourceConfig const param type fix\n\n* duplicate col for partitions\n\n* delta stats serialization from parquet data bug fixed\n\n* removed old code and mvn spotless apply\n\n* fixed partitioning by year in tests\n\n* timestamp col is of type timestamp not string (todo schemaExtractor logicalTypes for INT96)\n\n* Delta sync OK, stat conversion issue for Iceberg, metadata issue for Hudi\n\n* Stat conversion patch for string (ICEBERG)\n\n* Parsing Date Values from Partition Path, ICEBERG \u0026 DELTA Sync OK\n\n* fix for Binary Stats conversion in Hudi + upgraded Parquet Version\n\n* set recordKey Fields for Hudi Metadata + spotless:apply\n\n* write data in a data path for proper reading of sourceTable after sync (Tests)\n\n* set parquet schema for reading the dataset (Tests)\n\n* bug fix of dataPath (Tests)\n\n* different metadata path than the parquet file\u0027s to prevent reading confusion related to paths (Tests)\n\n* read parquet sparksession for tests\n\n* read parquet sparksession for tests\n\n* update\n\n* reading part col from path disabled\n\n* spotless apply and CI pass error fixed\n\n* CI pass error fixed\n\n* CI pass error fixed\n\n* CI pass error fixed\n\n* CI pass error fixed\n\n* CI pass error fixed\n\n* refactored parquetSource + cleanups\n\n* fix schemaExtractor bug\n\n* fix Parquet related partition values extraction from path\n\n* fix for Iceberg sync tests for CI to pass\n\n* binary stats are converted into string stats in parquet stats extractor\n\n* binary stats converted per logical type case: STRING....\n\n* testing dataset equivalence differently for Hudi (partition column removed)\n\n* set source identifier for current snapshot as the last modif time\n\n* set spark config for CI\n\n* reformatting + cleanups\n\n* iceberg CI error fix\n\n* delta CI error fix\n\n* delta CI error fix\n\n* refactoring for the statsExtractor\n\n* refactoring for the statsExtractor\n\n* refactoring for the statsExtractor\n\n* many partitions as input for parquet\n\n* many partitions as input for parquet\n\n* revert change in hudi spec extractor\n\n* fix for isNullable records\n\n* fix for isNullable records\n\n* cleanups\n\n* cleanups\n\n* revert hudi version to 0.14.0\n\n* spotless:apply\n\n* added test for non partitioned data + adjusted for cases of Month, Day partitions\n\n* resolving the merge conflict1\n\n* resolving the merge conflict1\n\n* resolving the merge conflict2\n\n* fix for Iceberg for (same key) partition values merge conflict\n\n* fix for reading the datasets in the test class + disable equivalence test for Hudi do to difference in parttition values\n\n* spotless:apply\n\n* added boolean type to the testing dataset\n\n* reformatting\n\n* cleanups\n\n* refactoring + reformatting\n\n* more data types in the testing dataset + refactoring\n\n* refactor test to seperate partitioned and non-partitioned cases\n\n* refactor test to seperate partitioned and non-partitioned cases\n\n* refactor test to seperate partitioned and non-partitioned cases\n\n* refactor test to seperate partitioned and non-partitioned cases\n\n* refactor test to seperate partitioned and non-partitioned cases\n\n* refactor test to seperate partitioned and non-partitioned cases\n\n* refactor test to seperate partitioned and non-partitioned cases\n\n* reformatting\n\n* re-read partitioned data -\u003e create new data with additional rows -\u003e partition again -\u003esync again\n\n* fix writing second dataset bug\n\n* fix writing second dataset bug\n\n* fix datasets equivalence bug\n\n* reformatting\n\n* reformatting\n\n* add more data than append to partitioned file then sync again test added\n\n* add more data than append to partitioned file then sync again test added\n\n* reformatting\n\n* cleanups\n\n* add test for Hudi format for non-partitioned data\n\n* bug fix iceberg partition values\n\n* bug fix iceberg partition values: revert Iceberg code\n\n* parse partition values fix\n\n* fix values parsing by lowering case the partitioning config\n\n* fix values parsing by lowering case the partitioning config 2\n\n* isIncrementalSafe returns false + cleanups + formatting\n\n* address remaining feedback, remove unnecessary changes, cleanup\n\n---------\n\nCo-authored-by: Selim Soufargi \u003cssoufargi.idealab.unical@gmail.com~\u003e\nCo-authored-by: Timothy Brown \u003ctim@onehouse.ai\u003e"
    },
    {
      "commit": "f43352b7fbcc483c3edddf7059c3eb855d08f58d",
      "tree": "29f62de97653985887f1a7d3c8a8d95bc96e9f45",
      "parents": [
        "483175b1ce4595dcd6b222a31fc3d4803255c81d"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Sep 08 10:08:14 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 08 10:08:14 2025 -0400"
      },
      "message": "Bump actions/checkout from 4 to 5 (#737)\n\nBumps [actions/checkout](https://github.com/actions/checkout) from 4 to 5.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v4...v5)\n\n---\nupdated-dependencies:\n- dependency-name: actions/checkout\n  dependency-version: \u00275\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "483175b1ce4595dcd6b222a31fc3d4803255c81d",
      "tree": "83c07e943839ce380602aadd08bcb577c022384a",
      "parents": [
        "51cec294b7fb64e6aebc12e934f7643295435ed6"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Sep 08 10:04:45 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 08 10:04:45 2025 -0400"
      },
      "message": "Bump actions/setup-node from 4 to 5 (#741)\n\nBumps [actions/setup-node](https://github.com/actions/setup-node) from 4 to 5.\n- [Release notes](https://github.com/actions/setup-node/releases)\n- [Commits](https://github.com/actions/setup-node/compare/v4...v5)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-node\n  dependency-version: \u00275\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "51cec294b7fb64e6aebc12e934f7643295435ed6",
      "tree": "d5583d9ff4f6cccabf26607d9ab4ae36c37aff60",
      "parents": [
        "0adb8d39fa772f49ce66a75ba7c5dc926b55db40"
      ],
      "author": {
        "name": "Roushan Kumar",
        "email": "roushankumar.nit@gmail.com",
        "time": "Mon Sep 08 19:07:35 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 08 09:37:35 2025 -0400"
      },
      "message": "Nested column partition support in HudiPartitionValuesExtractor when hive style partitioning is enabled (#738)\n\n"
    },
    {
      "commit": "0adb8d39fa772f49ce66a75ba7c5dc926b55db40",
      "tree": "d3f3485fd504cc360b11f076d43b4a28f74db0af",
      "parents": [
        "9f989bf1988bf9ce29f66bd2a9fe04bb4db73c6a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Sep 08 09:08:31 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 08 09:08:31 2025 -0400"
      },
      "message": "Bump actions/setup-java from 4 to 5 (#740)\n\nBumps [actions/setup-java](https://github.com/actions/setup-java) from 4 to 5.\n- [Release notes](https://github.com/actions/setup-java/releases)\n- [Commits](https://github.com/actions/setup-java/compare/v4...v5)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-java\n  dependency-version: \u00275\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "9f989bf1988bf9ce29f66bd2a9fe04bb4db73c6a",
      "tree": "db57323c1c1e9e72e9123656a0c346a4a35b1ae5",
      "parents": [
        "19cbda42cca1504fcfbaf130dabce8b1f7b24399"
      ],
      "author": {
        "name": "Pratyaksh Sharma",
        "email": "pratyaksh13@gmail.com",
        "time": "Wed Aug 13 07:04:52 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 12 21:34:52 2025 -0400"
      },
      "message": "Update sync.md page (#734)\n\n"
    },
    {
      "commit": "19cbda42cca1504fcfbaf130dabce8b1f7b24399",
      "tree": "1ab47bf29c21ab6e929d027c52f783a308b69a16",
      "parents": [
        "fe37d1d77f5766cb236f0482b41045213d165b36"
      ],
      "author": {
        "name": "Rahil C",
        "email": "32500120+rahil-c@users.noreply.github.com",
        "time": "Tue Jun 24 20:55:27 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 25 09:25:27 2025 +0530"
      },
      "message": "Add intial IT for XTable REST Service (#716)\n\n* Intial integration tests for xtable rest service\n\n* add hoodie read client\n\n* it fix\n\n* spotless"
    },
    {
      "commit": "fe37d1d77f5766cb236f0482b41045213d165b36",
      "tree": "8cbaa2e3350da0c2e25141644fb6f26d708cf9ce",
      "parents": [
        "d478d2e3355b5c6ba6562aaff48b0c3b0e0a76d1"
      ],
      "author": {
        "name": "Sagar Lakshmipathy",
        "email": "18vidhyasagar@gmail.com",
        "time": "Sat Jun 07 02:34:26 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 07 02:34:26 2025 +0530"
      },
      "message": "[DOCS] Add a new 0.3.0 release page (#725)\n\n* Update downloads.mdx\n\n* Update release-0.2.0-incubating.mdx\n\n* Create release-0.3.0-incubating.mdx\n\n* Update release-0.3.0-incubating.mdx"
    },
    {
      "commit": "d478d2e3355b5c6ba6562aaff48b0c3b0e0a76d1",
      "tree": "d61f9e3ee962afe881eddf1d6e196e5ad2ceb56b",
      "parents": [
        "3dd2f4b4df25f43ad032035f1719f9d8e459f3da"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Sat May 31 23:52:44 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 31 23:52:44 2025 +0530"
      },
      "message": "Fix typo in InternalTable (#720)\n\n"
    },
    {
      "commit": "3dd2f4b4df25f43ad032035f1719f9d8e459f3da",
      "tree": "270c9c767a04369f1da7ff6da1824a26f296f937",
      "parents": [
        "aa31ae8492f3651470afec78eb713cd410f2bf0b"
      ],
      "author": {
        "name": "Monil",
        "email": "moniln@uci.edu",
        "time": "Fri May 30 14:07:49 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 30 16:07:49 2025 -0500"
      },
      "message": "Improved all tests in TestHudiInstantUtils by parameterising and adding more test cases (#703)\n\n* imprved 2 tests in TestHudiInstantUtils by parameterizing and adding more test cases\n\n* fixed style issues"
    },
    {
      "commit": "aa31ae8492f3651470afec78eb713cd410f2bf0b",
      "tree": "963a063705d39e390eb5c216f1ce61a47f7d806d",
      "parents": [
        "108ec6473c6419a6b93ad0ffe2d39e46d9290f07"
      ],
      "author": {
        "name": "Rahil C",
        "email": "32500120+rahil-c@users.noreply.github.com",
        "time": "Fri May 30 11:31:00 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 31 00:01:00 2025 +0530"
      },
      "message": "Add additional properties when doing conversion for hudi (#714)\n\n* Add additional properties when doing conversion for hudi\n\n* fix other issue with hudi partitiong when iceberg is source, and fix UT\n\n* spotless apply"
    },
    {
      "commit": "108ec6473c6419a6b93ad0ffe2d39e46d9290f07",
      "tree": "2a0972ef6834df787a392148eca8d348e8db54e5",
      "parents": [
        "fc4d6e8960eb47b722ee2f319496e11fc7d33cfc"
      ],
      "author": {
        "name": "Selim Soufargi",
        "email": "80632333+unical1988@users.noreply.github.com",
        "time": "Sat May 17 21:00:13 2025 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 17 14:00:13 2025 -0500"
      },
      "message": "[553] Parquet Schema and Column Stats Converters (#669)\n\n* smaller PR for parquet\n\n* read parquet file for metadataExtractor: compiling, not testd\n\n* cleanups for statsExtractor: compiling, not testd\n\n* refactoring for statsExtractor: compiling, not testd\n\n* added avro dependency\n\n* added tests for SchemaExtractor: int and string primitiveTypes test passes\n\n* fixed some minor bugs in SchemaExtractor\n\n* close fileReader and handle exception\n\n* adjusted fromInternalSchema()\n\n* added a test and adjusted SchemaExtractor\n\n* added a testing code\n\n* bug fix for Schema extractor: groupType\n\n* bug fix for Schema extractor\n\n* bug fix for tests\n\n* bug fix for SchemaExtractor and added tests for nested lists support\n\n* bug fix for tests for nested lists support\n\n* bug fix for complex test which now passes!\n\n* added test for Map\n\n* schemaExtractor refactored\n\n* bug fixed isNullable() schema\n\n* fromInternalSchema : list and map types\n\n* decimal primitive test added\n\n* float primitive + list and map tests for fromInternalSchema\n\n* added tests for primitive type (date and timestamp)\n\n* refactoring for partitionValues extractor\n\n* git build error fixed\n\n* cleanups for schemaExtractor + refactoring for schemaExtractorTests + added test code for statsExtractor\n\n* added assertsEqual test for stats + removed partitionFields from the test,  TODO check if field is needed in ColumnStats\n\n* bug fixed for stats tests: columnStats + tests data are read using FileReader\n\n* bug fixed for stats tests, TODO equality test for two objects\n\n* added compareFiles() in InternDataFile for the statsExtractor tests to pass: OK\n\n* added custom comparison test for ColumnStat and InternDataFile, test passes, TODO: other stat types and other schema types testing\n\n* added custom comparison test for ColumnStat (field) and exec spotless apply\n\n* tempDir for parquet stats testing\n\n* binaryStatistics test passes\n\n* added int32 file schema test for statsExtractor\n\n* cleanups + added fields comparison for InternalDataFile\n\n* cleanups + added fixed_len_byte_array primitive type schema file test\n\n* use of genericGetMax instead for stats extraction + cleanups\n\n* boolean schema file test for statsExtractor added\n\n* removed hard coded path in statsExtractor test\n\n* cleanups + imports\n\n* separate tests for int and binary for stats\n\n* custom equals() not needed for InternalDataFile and ColumnStat\n\n* removed parquet version from core sub-project pom\n\n* statsExtractor tests as a suite, removed comments + run spotless apply\n\n* removed uncessary classes\n\n* removed uncessary classes: undo\n\n* undo irrelevant changes\n\n* fixed formatting issues with spotless:apply cmd\n\n* cleanups for test class and fixes for failed build\n\n* tmp file name fixed for failed build\n\n* cleanups\n\n* splotless apply run + assertion internalDataFile equality changed to display errors\n\n* fixes for build, PhysicalPath and BinaryStats\n\n* fixes for build, PhysicalPath and BinaryStats + synced fork\n\n* fixes for build, PhysicalPath and BinaryStats + synced fork\n\n* fixes for build and cleanups\n\n* fixes for build and cleanups\n\n* Parquet dep set as provided to use Spark\u0027s\n\n* parquet dep version back to 1.15.1\n\n* parquet-avro moved from core to project\u0027s pom\n\n* parquet-avro moved after hadoop-common\n\n* parquet dep scope removed\n\n* run spotless:apply\n\n---------\n\nCo-authored-by: Selim Soufargi \u003cssoufargi.idealab.unical@gmail.com~\u003e"
    },
    {
      "commit": "fc4d6e8960eb47b722ee2f319496e11fc7d33cfc",
      "tree": "6d9ed002ce4d2bc7a9db340bb563d019a58d52bc",
      "parents": [
        "81e8364538acc1bb98de09f95c7e9644c268aac8"
      ],
      "author": {
        "name": "Rahil C",
        "email": "32500120+rahil-c@users.noreply.github.com",
        "time": "Fri May 09 22:20:02 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 10 10:50:02 2025 +0530"
      },
      "message": "Add implementation for XTable REST Service (#704)\n\n* Add module for xtable rest service\n\n* Use builder pattern, spotless fix\n\n* Add unit test for conversion resource\n\n* Refactor code for easier testing, add unit test for service\n\n* Fix other failing modules tests by moving quarkus bom into xtable service\n\n* Add metadata helper utils, test other formats\n\n* Address Vinish intial set of comments\n\n* add unit test for util\n\n* minor fix for other unit test\n\n* spotless\n\n* fix dependency conflict to make unit tests run in ci\n\n* minor mvn fix\n\n* Address Vinish remaining comments\n\n* Address Vinish comments\n\n* Make sourceProviders private final\n\n---------\n\nCo-authored-by: Vinish Reddy \u003cvinish@apache.org\u003e"
    },
    {
      "commit": "81e8364538acc1bb98de09f95c7e9644c268aac8",
      "tree": "86d5fcd3b3b6f2af5dbcbdf5f643db49ea4c238e",
      "parents": [
        "5ec6b8d0443ca43945303b2dca40eb14d1439513"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Sat May 10 10:26:41 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 10 10:26:41 2025 +0530"
      },
      "message": "Update NOTICE file for bundled jars (#709)\n\n"
    },
    {
      "commit": "5ec6b8d0443ca43945303b2dca40eb14d1439513",
      "tree": "a97e0047d0cea02c99e113a455f58b29481e3bef",
      "parents": [
        "af60ab4f411bc93c6d976b1266dc451efb833c25"
      ],
      "author": {
        "name": "Rahil C",
        "email": "32500120+rahil-c@users.noreply.github.com",
        "time": "Fri May 09 13:26:30 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 10 01:56:30 2025 +0530"
      },
      "message": "Add latest metadata path field in InternalTable (#710)\n\n* Add latest metadata path field\n\n* ensure field is asserted"
    },
    {
      "commit": "af60ab4f411bc93c6d976b1266dc451efb833c25",
      "tree": "f455a49d023e78175ae715dfd57995ac05259dd1",
      "parents": [
        "0f0d30c620bab7f4e7acf624b597d1327774ea87"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Thu May 08 11:17:21 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 08 11:17:21 2025 +0530"
      },
      "message": "Update license files for bundled jars (#707)\n\n"
    },
    {
      "commit": "0f0d30c620bab7f4e7acf624b597d1327774ea87",
      "tree": "76870e4fbc974d15a1811010e73ff8d7f6826cb7",
      "parents": [
        "d60e0469a2e85a34fe6803df21e106f111a8bb19"
      ],
      "author": {
        "name": "Dipankar Mazumdar",
        "email": "103004148+dipankarmazumdar@users.noreply.github.com",
        "time": "Wed May 07 17:06:01 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 08 02:36:01 2025 +0530"
      },
      "message": "catalog sync blog (#708)\n\n"
    },
    {
      "commit": "d60e0469a2e85a34fe6803df21e106f111a8bb19",
      "tree": "7f8537ab43740fc00650c920a5213c102c092fd4",
      "parents": [
        "18956f6081024e61124ba2665ce286a46c134510"
      ],
      "author": {
        "name": "Rahil C",
        "email": "32500120+rahil-c@users.noreply.github.com",
        "time": "Wed Apr 30 21:39:58 2025 -0700"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 01 10:09:58 2025 +0530"
      },
      "message": "Add open api REST spec for XTable Service (#705)\n\n"
    },
    {
      "commit": "18956f6081024e61124ba2665ce286a46c134510",
      "tree": "eaed140ba21cfadff9e43e7e0f6e07dcc58efdfc",
      "parents": [
        "a39988e369dd4936a331d9f30ab8e199539dde17"
      ],
      "author": {
        "name": "Dipankar Mazumdar",
        "email": "103004148+dipankarmazumdar@users.noreply.github.com",
        "time": "Wed Apr 30 15:48:29 2025 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 01 01:18:29 2025 +0530"
      },
      "message": "[DOCS]: Add 3 New Community Blogs (#706)\n\n* Ignore my_config_catalog.yaml\n\n* Add 3 community blogs"
    },
    {
      "commit": "a39988e369dd4936a331d9f30ab8e199539dde17",
      "tree": "f45fbc06b6e175c17935cf07183c8d611876655a",
      "parents": [
        "62814422118d807ad829be5d0aae44b879d20c72"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Thu Apr 17 09:19:40 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 17 09:19:40 2025 +0530"
      },
      "message": "Ensure LICENSE content is different for bundled jars (#699)\n\n"
    },
    {
      "commit": "62814422118d807ad829be5d0aae44b879d20c72",
      "tree": "69fd6ef7cf3747a6e47355bdef62631abf55f1f7",
      "parents": [
        "50b33c4fb142e2dadbbd01934a9059b5263a6a83"
      ],
      "author": {
        "name": "Roushan Kumar",
        "email": "roushankumar.nit@gmail.com",
        "time": "Thu Apr 17 02:48:39 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 17 02:48:39 2025 +0530"
      },
      "message": "Remove parameters from Glue partition columns (#697)\n\n* Remove parameters from partition columns in Glue\n\n* fix tests"
    },
    {
      "commit": "50b33c4fb142e2dadbbd01934a9059b5263a6a83",
      "tree": "ca0cbe44c4b475bcf13d475a9acca56f2e65e5ae",
      "parents": [
        "5d88fadaf1c50bf378d68c5629ec97cffcf6dcdb"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Wed Apr 16 07:39:13 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 16 07:39:13 2025 +0530"
      },
      "message": "[692] Exclude jol-core in xtable bundled dependencies (#696)\n\n* Exclude jol-core in xtable bundled dependencies\n\n* Fix build\n\n* Exclude jol from hudi-common and include it as test deps\n\n* Tidying up\n\n* Fix build\n\n* Fix build for xtable-utilities"
    },
    {
      "commit": "5d88fadaf1c50bf378d68c5629ec97cffcf6dcdb",
      "tree": "3a664726fcea663a690f9405fb13f2df73db7f0e",
      "parents": [
        "4f8cc6b977857a9fd46931f8d06df8ce80899c92"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Tue Apr 15 09:22:08 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 15 09:22:08 2025 +0530"
      },
      "message": "Include 2025 in NOTICE file (#695)\n\n"
    },
    {
      "commit": "4f8cc6b977857a9fd46931f8d06df8ce80899c92",
      "tree": "03733932315391872b1d91d3c142ea7a289fc5e8",
      "parents": [
        "f41f740180bcc10265981567ef9ffdad6240ba98"
      ],
      "author": {
        "name": "Om Kenge",
        "email": "88768848+omkenge@users.noreply.github.com",
        "time": "Mon Apr 14 23:38:14 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 14 13:08:14 2025 -0500"
      },
      "message": "Docs: Update Footer Copyright Year (#654)\n\n* Update index.html\n\n* Update NOTICE"
    },
    {
      "commit": "f41f740180bcc10265981567ef9ffdad6240ba98",
      "tree": "e5daec3c591987a77582c19f811d20203768cdc8",
      "parents": [
        "9d19db3f0c2e7a104ddeb37337e0fcf523eea65c"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Wed Apr 09 08:15:03 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 09 08:15:03 2025 +0530"
      },
      "message": "Add LICENSE for xtable-hive-metastore module (#691)\n\n"
    },
    {
      "commit": "9d19db3f0c2e7a104ddeb37337e0fcf523eea65c",
      "tree": "7371cc18070572e97d9de41fa815c869ce0b2727",
      "parents": [
        "d4ffce6a787983d460e0cd5050348a3a550e7b35"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Wed Apr 09 08:14:36 2025 +0530"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 09 08:14:36 2025 +0530"
      },
      "message": "Add LICENSE for xtable-aws module (#690)\n\n"
    },
    {
      "commit": "d4ffce6a787983d460e0cd5050348a3a550e7b35",
      "tree": "b7999bf9267dfcf34c0a67fe2570b473baac4f9d",
      "parents": [
        "25b41208966587f63f81f10117c163fc50fd2c31"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinish@apache.org",
        "time": "Mon Apr 07 21:16:17 2025 -0700"
      },
      "committer": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Tue Apr 08 21:59:37 2025 +0530"
      },
      "message": "Enable squash and merge in .asf.yaml for xtable\n"
    },
    {
      "commit": "25b41208966587f63f81f10117c163fc50fd2c31",
      "tree": "97e0f422663bbb547241a647a4dcf5be7265ccae",
      "parents": [
        "495319578f2bc60c9370071cf10b28b1aa4cdf00"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinish@apache.org",
        "time": "Mon Apr 07 21:05:30 2025 -0700"
      },
      "committer": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Tue Apr 08 09:55:03 2025 +0530"
      },
      "message": "Bump org.apache.parquet:parquet-avro from 1.12.3 to 1.15.1\n"
    },
    {
      "commit": "495319578f2bc60c9370071cf10b28b1aa4cdf00",
      "tree": "c40e279a2093d84d71e46860fcb4b62ef78786f8",
      "parents": [
        "d6ea384444a3b3bcc35d669579cd4bd6114c0f6e"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Mon Apr 07 15:08:59 2025 -0700"
      },
      "committer": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Tue Apr 08 03:56:52 2025 +0530"
      },
      "message": "Introduce maturity-level in xtable-api and Refactor SyncStatusCode into separate class\n"
    },
    {
      "commit": "d6ea384444a3b3bcc35d669579cd4bd6114c0f6e",
      "tree": "49bd21956bddf9a89883dc44f39d2dc37a0507e0",
      "parents": [
        "c64e94d62a1b3fe0981c21690849a39c603828b0"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Mon Apr 07 00:54:54 2025 -0700"
      },
      "committer": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Mon Apr 07 21:04:40 2025 +0530"
      },
      "message": "Avoid skipping xtable-aws and xtable-hive-metastore in mvn deploy\n"
    },
    {
      "commit": "c64e94d62a1b3fe0981c21690849a39c603828b0",
      "tree": "ee58e50f96e66d3ec47413ab2f194b5418a21b76",
      "parents": [
        "c2a22803f1828991854f8b931c000743b25ee831"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Mon Apr 07 02:46:46 2025 -0700"
      },
      "committer": {
        "name": "Tim Brown",
        "email": "tim.brown126@gmail.com",
        "time": "Mon Apr 07 07:26:27 2025 -0500"
      },
      "message": "Add contribution guidelines to reflect stale PR\u0027s guidelines\n"
    },
    {
      "commit": "c2a22803f1828991854f8b931c000743b25ee831",
      "tree": "95d27822984c181eb20f7ba3c7cbc9ebca0abae1",
      "parents": [
        "3a5ea7289c330d887c4746d36b5dfd0dccbdd1b9"
      ],
      "author": {
        "name": "Timothy Brown",
        "email": "tim@onehouse.ai",
        "time": "Sun Apr 06 20:17:44 2025 -0500"
      },
      "committer": {
        "name": "Tim Brown",
        "email": "tim.brown126@gmail.com",
        "time": "Sun Apr 06 21:04:18 2025 -0500"
      },
      "message": "move to commit mailing list, issues does not exist\n"
    },
    {
      "commit": "3a5ea7289c330d887c4746d36b5dfd0dccbdd1b9",
      "tree": "5519d58070c099da7b5912cead433e2400890e00",
      "parents": [
        "e1b27c7a6190d079d2452ce02cbe6df56d21942a"
      ],
      "author": {
        "name": "Timothy Brown",
        "email": "tim@onehouse.ai",
        "time": "Sun Apr 06 12:08:38 2025 -0500"
      },
      "committer": {
        "name": "Tim Brown",
        "email": "tim.brown126@gmail.com",
        "time": "Sun Apr 06 12:43:43 2025 -0500"
      },
      "message": "add mailing list for discussions, update issues list\n"
    },
    {
      "commit": "e1b27c7a6190d079d2452ce02cbe6df56d21942a",
      "tree": "97a6b0db763178d45f7325458066976f72a4bc9f",
      "parents": [
        "5f25adc8ebe4a6f7c0c307aafda42e9273f580d1"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Wed Apr 02 09:06:48 2025 -0700"
      },
      "committer": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Wed Apr 02 22:11:21 2025 +0530"
      },
      "message": "Add how-to docs for catalog sync\n"
    },
    {
      "commit": "5f25adc8ebe4a6f7c0c307aafda42e9273f580d1",
      "tree": "3dd73e4cd8ae12d02a384cc8d679dd086575a1a8",
      "parents": [
        "ffe898a574bdd63e75e8c2ae89524957f512a4aa"
      ],
      "author": {
        "name": "vaibhavk1992",
        "email": "kumarvaibhav1992@ymail.com",
        "time": "Tue Mar 25 23:13:29 2025 +0530"
      },
      "committer": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Wed Apr 02 13:29:35 2025 +0530"
      },
      "message": "Refactor RunSync Class for Improved Modularity and Reusability\n\nremoving extra spaces\n\nmoving config file to resources\n\nadding spotless apply\n"
    },
    {
      "commit": "ffe898a574bdd63e75e8c2ae89524957f512a4aa",
      "tree": "5b600dd525d82c3d73b96bf22f1f029e11ba1d00",
      "parents": [
        "680cf9c170982f1471b88a02cb2ed4021c4b3272"
      ],
      "author": {
        "name": "Timothy Brown",
        "email": "tim@onehouse.ai",
        "time": "Tue Apr 01 22:14:16 2025 -0500"
      },
      "committer": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Wed Apr 02 10:00:25 2025 +0530"
      },
      "message": "fix docker file syntax issue\n"
    },
    {
      "commit": "680cf9c170982f1471b88a02cb2ed4021c4b3272",
      "tree": "d59fb3547dfc344f206ebd40f620f3d67e99c66d",
      "parents": [
        "dafe24a86c38bf32ce93464d14ce66c0029ca724"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Tue Apr 01 14:48:46 2025 -0700"
      },
      "committer": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Wed Apr 02 03:37:37 2025 +0530"
      },
      "message": "Handle timestamp_ntz in delta and iceberg\n"
    },
    {
      "commit": "dafe24a86c38bf32ce93464d14ce66c0029ca724",
      "tree": "316024c4b207e2112244dde884e69efd2a0eac8d",
      "parents": [
        "23d870ede0ef54a28c0cfdc65908bc74fcffe3ff"
      ],
      "author": {
        "name": "Timothy Brown",
        "email": "tim@onehouse.ai",
        "time": "Mon Mar 31 20:11:38 2025 -0500"
      },
      "committer": {
        "name": "Tim Brown",
        "email": "tim.brown126@gmail.com",
        "time": "Mon Mar 31 20:32:53 2025 -0500"
      },
      "message": "Add support for bucket partition transform, ignore void partition in iceberg source\n"
    },
    {
      "commit": "23d870ede0ef54a28c0cfdc65908bc74fcffe3ff",
      "tree": "7e91b0762f9a783fd2be92e8fd655177cdb3ebd2",
      "parents": [
        "50e518147468e878b3b64c30aa606cedc5ae230f"
      ],
      "author": {
        "name": "rbokka",
        "email": "rbokka@microsoft.com",
        "time": "Fri Mar 07 08:55:42 2025 -0500"
      },
      "committer": {
        "name": "Ashvin",
        "email": "ashvina@users.noreply.github.com",
        "time": "Tue Mar 11 13:05:03 2025 -0700"
      },
      "message": "Modified incremental safe check which does not depend on snapshots list order\nCo-authored-by: Timothy Brown \u003ctim@onehouse.ai\u003e\n"
    },
    {
      "commit": "50e518147468e878b3b64c30aa606cedc5ae230f",
      "tree": "5c29657ba08977026350d7dec74a11fdae987981",
      "parents": [
        "546edaa377f56358f77e7a6395909c617caf5750"
      ],
      "author": {
        "name": "Timothy Brown",
        "email": "tim@onehouse.ai",
        "time": "Sun Mar 09 10:26:48 2025 -0500"
      },
      "committer": {
        "name": "Tim Brown",
        "email": "tim.brown126@gmail.com",
        "time": "Tue Mar 11 08:21:47 2025 -0500"
      },
      "message": "minor fixes recommended from static analysis tooling\n"
    },
    {
      "commit": "546edaa377f56358f77e7a6395909c617caf5750",
      "tree": "2c5df04a6a28808700270d388c1aeb3796c21b08",
      "parents": [
        "fc1ba78a3c1836d7eebeaafed23c9bbc2f108a74"
      ],
      "author": {
        "name": "Timothy Brown",
        "email": "tim@onehouse.ai",
        "time": "Mon Mar 10 13:09:52 2025 -0500"
      },
      "committer": {
        "name": "Tim Brown",
        "email": "tim.brown126@gmail.com",
        "time": "Mon Mar 10 13:28:54 2025 -0500"
      },
      "message": "Add continous sync mode for utilities bundle, add additional testing\n"
    },
    {
      "commit": "fc1ba78a3c1836d7eebeaafed23c9bbc2f108a74",
      "tree": "56e9c79b46d1d851daa8ba2008378bffdb4cc418",
      "parents": [
        "c76692b85a646adb449a263652747c1c87de37b8"
      ],
      "author": {
        "name": "Ashvin Agrawal",
        "email": "ashvin@apache.org",
        "time": "Wed Mar 05 16:21:19 2025 -0800"
      },
      "committer": {
        "name": "Ashvin",
        "email": "ashvina@users.noreply.github.com",
        "time": "Thu Mar 06 15:18:26 2025 -0800"
      },
      "message": "Fix flaky test, ignore order of elements in list validation\n"
    },
    {
      "commit": "c76692b85a646adb449a263652747c1c87de37b8",
      "tree": "ba99282f860f5860899a5870b00eb2f2679ab55c",
      "parents": [
        "dc209962c8f255be3b2afa5e213e5ca7735a3a14"
      ],
      "author": {
        "name": "Ashvin Agrawal",
        "email": "ashvin@apache.org",
        "time": "Sun Feb 16 12:48:22 2025 -0800"
      },
      "committer": {
        "name": "Ashvin",
        "email": "ashvina@users.noreply.github.com",
        "time": "Wed Mar 05 14:34:49 2025 -0800"
      },
      "message": "Add base representation of storage files\n"
    },
    {
      "commit": "dc209962c8f255be3b2afa5e213e5ca7735a3a14",
      "tree": "2a73eb1e8d9ef1eede9a66d0ab07c9e18fc41e4f",
      "parents": [
        "03e5b02239db0008bd96b1b9f757e469a7b668d0"
      ],
      "author": {
        "name": "Ashvin Agrawal",
        "email": "ashvin@apache.org",
        "time": "Tue Jan 28 09:15:12 2025 -0800"
      },
      "committer": {
        "name": "Ashvin",
        "email": "ashvina@users.noreply.github.com",
        "time": "Mon Mar 03 13:37:29 2025 -0800"
      },
      "message": "Add change proposal for conversion of deletion vectors\n"
    },
    {
      "commit": "03e5b02239db0008bd96b1b9f757e469a7b668d0",
      "tree": "279525f2c0f15033ea01221f8fd013734c9c7feb",
      "parents": [
        "f194f4cbc8a54a2cfd49c18b14d656abb046baf2"
      ],
      "author": {
        "name": "Vamsi",
        "email": "vamsi@onehouse.ai",
        "time": "Thu Feb 13 17:14:34 2025 +0530"
      },
      "committer": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Mon Feb 24 13:24:43 2025 +0530"
      },
      "message": "[590] Add Hudi Glue Catalog Sync Implementation\n"
    },
    {
      "commit": "f194f4cbc8a54a2cfd49c18b14d656abb046baf2",
      "tree": "901cdd9f20997a1a516275ed07e2732a2deb35ce",
      "parents": [
        "b3e03e5522af9e1dc08133b849f7e802b755dbab"
      ],
      "author": {
        "name": "Vamsi",
        "email": "vamsi@onehouse.ai",
        "time": "Tue Feb 11 20:00:00 2025 +0530"
      },
      "committer": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Wed Feb 19 15:06:09 2025 +0530"
      },
      "message": "[590] Add Hudi HMS Catalog Sync Implementation\n"
    },
    {
      "commit": "b3e03e5522af9e1dc08133b849f7e802b755dbab",
      "tree": "ef20346d42776d431847c6aa30e668ef56da93b4",
      "parents": [
        "67946b98f45a722a2d277677f23c11aaeec734ce"
      ],
      "author": {
        "name": "Daniel Tu",
        "email": "danieltu.life@gmail.com",
        "time": "Sat Oct 26 18:01:16 2024 -0700"
      },
      "committer": {
        "name": "Tim Brown",
        "email": "tim.brown126@gmail.com",
        "time": "Tue Feb 18 09:14:05 2025 -0600"
      },
      "message": "[40] Add commit-level metadata and source-target id mapping\n"
    },
    {
      "commit": "67946b98f45a722a2d277677f23c11aaeec734ce",
      "tree": "e7a825476910a81be1cc5e97d0fc0941321d213c",
      "parents": [
        "2e71e156667f9304442e834410e95abd03837fc6"
      ],
      "author": {
        "name": "Emmanuel Ferdman",
        "email": "emmanuelferdman@gmail.com",
        "time": "Sat Feb 15 12:50:13 2025 -0800"
      },
      "committer": {
        "name": "Tim Brown",
        "email": "tim.brown126@gmail.com",
        "time": "Sun Feb 16 13:14:06 2025 -0600"
      },
      "message": "Update conversion sources\n\nSigned-off-by: Emmanuel Ferdman \u003cemmanuelferdman@gmail.com\u003e\n"
    },
    {
      "commit": "2e71e156667f9304442e834410e95abd03837fc6",
      "tree": "cdab033b8c92b078caac6e568ff8387b355319f7",
      "parents": [
        "e79a2d34e78f6dd5c179813630912c086903aed2"
      ],
      "author": {
        "name": "Vamsi",
        "email": "vamsi@onehouse.ai",
        "time": "Tue Feb 11 20:00:00 2025 +0530"
      },
      "committer": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Thu Feb 13 14:01:59 2025 +0530"
      },
      "message": "[590] Changes in xtable-core for Hudi Catalog Sync\n"
    },
    {
      "commit": "e79a2d34e78f6dd5c179813630912c086903aed2",
      "tree": "34f0b6961168e1461a4ee71613ea8805989e74b0",
      "parents": [
        "f2045be951fa1af4c1c736ac524e6a3e50acb870"
      ],
      "author": {
        "name": "Roushan Kumar",
        "email": "roushankumar.nit@gmail.com",
        "time": "Fri Feb 07 00:15:14 2025 +0530"
      },
      "committer": {
        "name": "Tim Brown",
        "email": "tim.brown126@gmail.com",
        "time": "Thu Feb 06 11:10:23 2025 -0800"
      },
      "message": "[590] Add Delta HMS Catalog Sync implementation\n"
    },
    {
      "commit": "f2045be951fa1af4c1c736ac524e6a3e50acb870",
      "tree": "88a48bee8da13ec48be97d252605b7301b9d9f5c",
      "parents": [
        "30f3e544158aad880e0ab094da15d303f90cd3d7"
      ],
      "author": {
        "name": "Roushan Kumar",
        "email": "roushankumar.nit@gmail.com",
        "time": "Fri Feb 07 00:07:23 2025 +0530"
      },
      "committer": {
        "name": "Tim Brown",
        "email": "tim.brown126@gmail.com",
        "time": "Thu Feb 06 11:08:36 2025 -0800"
      },
      "message": "[590] Add Delta Glue Catalog Sync implementation\n"
    },
    {
      "commit": "30f3e544158aad880e0ab094da15d303f90cd3d7",
      "tree": "49be4712ecc7d0974f499e4843c74445331eaea5",
      "parents": [
        "8b0b5eafa03c745313de324a50e92d40ad88119d"
      ],
      "author": {
        "name": "Roushan Kumar",
        "email": "roushankumar.nit@gmail.com",
        "time": "Wed Feb 05 00:05:42 2025 +0530"
      },
      "committer": {
        "name": "Tim Brown",
        "email": "tim.brown126@gmail.com",
        "time": "Tue Feb 04 13:09:10 2025 -0800"
      },
      "message": "[590] Add Iceberg HMS Catalog Sync implementation\n"
    },
    {
      "commit": "8b0b5eafa03c745313de324a50e92d40ad88119d",
      "tree": "423a6627cbeaa7c0358b670b168e7e76f3af9573",
      "parents": [
        "79c68def760db554eab7eacd418e81e08788f65a"
      ],
      "author": {
        "name": "Roushan Kumar",
        "email": "roushankumar.nit@gmail.com",
        "time": "Tue Feb 04 22:35:16 2025 +0530"
      },
      "committer": {
        "name": "Tim Brown",
        "email": "tim.brown126@gmail.com",
        "time": "Tue Feb 04 09:36:21 2025 -0800"
      },
      "message": "[590] Add Iceberg Glue Catalog Sync implementation\n"
    },
    {
      "commit": "79c68def760db554eab7eacd418e81e08788f65a",
      "tree": "8202f76546538f56c57a1a571fb14cc4aa30766e",
      "parents": [
        "d3bbe5febb6facd7b9dc7aa0994e37125cac91eb"
      ],
      "author": {
        "name": "Bhavani Sudha Saktheeswaran",
        "email": "2179254+bhasudha@users.noreply.github.com",
        "time": "Sun Feb 02 07:45:22 2025 -0800"
      },
      "committer": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Tue Feb 04 01:08:56 2025 +0530"
      },
      "message": "[site] Update blogs\n"
    },
    {
      "commit": "d3bbe5febb6facd7b9dc7aa0994e37125cac91eb",
      "tree": "33a6287d94fcc51a634eca9c36358d51c5d00c49",
      "parents": [
        "9fa812e32df3bba25cfa27398c10a7c9eb24e2e2"
      ],
      "author": {
        "name": "Hanzhi Wang",
        "email": "hanzhi_wang@apple.com",
        "time": "Wed Jan 15 23:12:49 2025 -0800"
      },
      "committer": {
        "name": "Tim Brown",
        "email": "tim.brown126@gmail.com",
        "time": "Fri Jan 31 14:04:30 2025 -0600"
      },
      "message": "Delta source: add record count for DataFile\n\nThe change improved how to get the number of records from Delta source and fixed the edge case when columnStats list is empty, the number of records is 0.\nA wrapper called FileStats is added to wrap the list of ColumnStat and num of records per file.\n"
    },
    {
      "commit": "9fa812e32df3bba25cfa27398c10a7c9eb24e2e2",
      "tree": "f5f0cacdd075948fbfd195ed62a433f0fd337bc0",
      "parents": [
        "c9deec1acc96d0662fb57c9036df90461f082a79"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Mon Jan 27 11:15:03 2025 -0800"
      },
      "committer": {
        "name": "Vinish Reddy",
        "email": "vinishreddypannala@gmail.com",
        "time": "Tue Jan 28 01:02:48 2025 +0530"
      },
      "message": "[590] Add RunCatalogSync utility for synchronizing tables across catalogs\n"
    },
    {
      "commit": "c9deec1acc96d0662fb57c9036df90461f082a79",
      "tree": "4aed77c205600c295f6b0bb8a857dc69a13974fa",
      "parents": [
        "b463ae6ebea3e3c6f2c6513d803cfa8dece1a75b"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Mon Jan 27 10:50:57 2025 -0800"
      },
      "committer": {
        "name": "Vinish Reddy",
        "email": "vinishreddypannala@gmail.com",
        "time": "Tue Jan 28 00:44:01 2025 +0530"
      },
      "message": "[590] Add RFC for XCatalogSync - Synchronize tables across catalogs\n"
    },
    {
      "commit": "b463ae6ebea3e3c6f2c6513d803cfa8dece1a75b",
      "tree": "5cf1c048a0023f56100977dc4ab171ce5abb8e96",
      "parents": [
        "14967dd610cb013e4c90718a2974e091b0ec4bf7"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Mon Jan 27 10:17:39 2025 -0800"
      },
      "committer": {
        "name": "Vinish Reddy",
        "email": "vinishreddypannala@gmail.com",
        "time": "Tue Jan 28 00:04:26 2025 +0530"
      },
      "message": "Update GMeet link and add today\u0027s recording\n"
    },
    {
      "commit": "14967dd610cb013e4c90718a2974e091b0ec4bf7",
      "tree": "a0f282e58de9223fec7a6f91242c04da07494f69",
      "parents": [
        "4db9bb868655eea3dcc15c4692323f68fef4f454"
      ],
      "author": {
        "name": "Vinish Reddy",
        "email": "vinishreddygunner17@gmail.com",
        "time": "Wed Jan 22 14:51:12 2025 -0800"
      },
      "committer": {
        "name": "Vinish Reddy",
        "email": "vinishreddypannala@gmail.com",
        "time": "Thu Jan 23 04:37:42 2025 +0530"
      },
      "message": "Add community sync page for XTable\n"
    },
    {
      "commit": "4db9bb868655eea3dcc15c4692323f68fef4f454",
      "tree": "a0a1b1a0d23fd4431fb09d3b62322008bbfb33ec",
      "parents": [
        "8c143a7e839bb0b14e4a21cff654be777e6353c7"
      ],
      "author": {
        "name": "Timothy Brown",
        "email": "tim@onehouse.ai",
        "time": "Thu Jan 02 16:58:10 2025 -0800"
      },
      "committer": {
        "name": "Tim Brown",
        "email": "tim.brown126@gmail.com",
        "time": "Tue Jan 07 11:02:00 2025 -0600"
      },
      "message": "add iceberg stats when reading snapshot\n"
    },
    {
      "commit": "8c143a7e839bb0b14e4a21cff654be777e6353c7",
      "tree": "d91ff9a8d5d6a459bfca3d85f0a08244906d479d",
      "parents": [
        "2b01cc0c4dd8c5c75deaf7737e234bdaf927b1bd"
      ],
      "author": {
        "name": "Timothy Brown",
        "email": "tim@onehouse.ai",
        "time": "Tue Jan 07 09:22:17 2025 -0600"
      },
      "committer": {
        "name": "Tim Brown",
        "email": "tim.brown126@gmail.com",
        "time": "Tue Jan 07 10:19:08 2025 -0600"
      },
      "message": "scale BigDecimal col stats correctly\n"
    }
  ],
  "next": "2b01cc0c4dd8c5c75deaf7737e234bdaf927b1bd"
}
