)]}'
{
  "commit": "9c4b983064076fe512e0e61aad79dcc288e243eb",
  "tree": "be9b5a35af1ee09fa30d74e9bdd02e69c514ba99",
  "parents": [
    "199a910bd8623cac3db82d70f9bfb24865613c2c"
  ],
  "author": {
    "name": "Andy Grove",
    "email": "agrove@apache.org",
    "time": "Mon Aug 31 10:11:29 2026 -0600"
  },
  "committer": {
    "name": "Andy Grove",
    "email": "agrove@apache.org",
    "time": "Mon Aug 31 10:16:12 2026 -0600"
  },
  "message": "chore: report the codegen-dispatch gate from getSupportLevel\n\nSerdes whose only path is the JVM codegen dispatcher reported Compatible\nfrom getSupportLevel and then discovered inside convert that the\ndispatcher would not run the expression, either because\nspark.comet.exec.scalaUDF.codegen.enabled is off or because\nCometBatchKernelCodegen.canHandle rejected the bound tree.\n\nThat breaks the serde invariant, and it is the one shape the dispatcher\ncannot see: dispatchIfFallback is reached only from the Unsupported and\nIncompatible arms of exprToProtoInternal.\n\nExtract the two checks into CometScalaUDF.dispatchSupportLevel and report\nthem from getSupportLevel on CometCodegenDispatch (62 serdes inherit it)\nand CometScalaUDF. Behaviour is unchanged: CometCodegenDispatch does not\nmix in CodegenDispatchFallback, so an Unsupported result tags the same\nreason text and falls the operator back to Spark exactly as before.\n\nSix CometCodegenDispatch subclasses override getSupportLevel\n(CometGetJsonObject, CometLengthOfJsonArray, CometStructsToJson,\nCometJsonToStructs, CometMakeTimestamp, CometToUnixTimestamp) and are not\ncovered here, since each has to compose the gate with its own native\nopt-in branch. Same for the serdes that call emitJvmCodegenDispatch\ninline from convert. Both are follow-ups.\n\nRelated to #5574.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "26fe0c591ab8eded968c616cd342c4010fb5692b",
      "old_mode": 33188,
      "old_path": "spark/src/main/scala/org/apache/comet/serde/CometScalaUDF.scala",
      "new_id": "853245a61adca97e563c9a9cff1d5fe8394f2ee9",
      "new_mode": 33188,
      "new_path": "spark/src/main/scala/org/apache/comet/serde/CometScalaUDF.scala"
    },
    {
      "type": "modify",
      "old_id": "5806cb35015cc81ed8839248b0798e9d7559c2d5",
      "old_mode": 33188,
      "old_path": "spark/src/test/scala/org/apache/comet/CometCodegenSuite.scala",
      "new_id": "ca091e924dbdf9368173b6a9c4bcb903452d8fe7",
      "new_mode": 33188,
      "new_path": "spark/src/test/scala/org/apache/comet/CometCodegenSuite.scala"
    }
  ]
}
