)]}'
{
  "commit": "44d29290db31b942f93d1b74cadf4fb40347949b",
  "tree": "12ab1da4db327fef67f73c4f41f3873dac2ee7c1",
  "parents": [
    "b37194e31f3cc9f097f8871b72b1d4a80e322cfe"
  ],
  "author": {
    "name": "Yang Xia",
    "email": "xiazcy@gmail.com",
    "time": "Thu Aug 06 17:36:54 2026 -0700"
  },
  "committer": {
    "name": "Yang Xia",
    "email": "xiazcy@gmail.com",
    "time": "Thu Aug 06 17:36:54 2026 -0700"
  },
  "message": "fix: Add explicit type check in SumLocalStep and document local scope boxing semantics\n\nAdd an instanceof Number guard in SumLocalStep to deterministically reject non-numeric input on the single-element path, fixing a JIT-dependent type-erasure hole where sum(local) on a non-numeric scalar would sometimes pass through as identity instead of erroring.\n\nDocument the Scope.local boxing/wrapping contract in the semantics doc (scalars are coerced to single-element sequences) and add tests locking the behavior for sum, mean, min, and max local steps, plus the IteratorUtils singleton-wrapping contract.\n\nAssisted-by: Kiro:claude-opus-4 [kiro-cli]\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "215a069d9c5053f258b52aa03c923700cdd02d5e",
      "old_mode": 33188,
      "old_path": "docs/src/dev/provider/gremlin-semantics.asciidoc",
      "new_id": "814f21151dc77ce01bd7ebbc536da7f440ea1bfe",
      "new_mode": 33188,
      "new_path": "docs/src/dev/provider/gremlin-semantics.asciidoc"
    },
    {
      "type": "modify",
      "old_id": "66903dc5b761e39aafdcb62438ae467e70f55655",
      "old_mode": 33188,
      "old_path": "gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SumLocalStep.java",
      "new_id": "077feb9bea4a1560a5fd5cba2ed8fbca9d624be9",
      "new_mode": 33188,
      "new_path": "gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SumLocalStep.java"
    },
    {
      "type": "modify",
      "old_id": "5fb0045ab97b7af3b5d18f24f432354d9eaa8bc5",
      "old_mode": 33188,
      "old_path": "gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MaxLocalStepTest.java",
      "new_id": "9546f46e470ecbaa8949bba88e05bc243085161b",
      "new_mode": 33188,
      "new_path": "gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MaxLocalStepTest.java"
    },
    {
      "type": "modify",
      "old_id": "cb134dec47ad89016c31f689d72dbf2e238149c3",
      "old_mode": 33188,
      "old_path": "gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanLocalStepTest.java",
      "new_id": "75e1382731c111f7a12e3eb6128b618ea0e60e8a",
      "new_mode": 33188,
      "new_path": "gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanLocalStepTest.java"
    },
    {
      "type": "modify",
      "old_id": "9db2181c4d6ca736e211ddc870c7dfd31c293052",
      "old_mode": 33188,
      "old_path": "gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MinLocalStepTest.java",
      "new_id": "095bebb8ea8325f47f3a390782ea99a931983585",
      "new_mode": 33188,
      "new_path": "gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MinLocalStepTest.java"
    },
    {
      "type": "modify",
      "old_id": "1cc6ffe0922eaa704426958bb26a3aca4272e37b",
      "old_mode": 33188,
      "old_path": "gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SumLocalStepTest.java",
      "new_id": "3576341051e4f274d01c6a46f6a37e54434fe10e",
      "new_mode": 33188,
      "new_path": "gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SumLocalStepTest.java"
    },
    {
      "type": "modify",
      "old_id": "750ea870388d6bd5d480a838fe13b6c1519b494e",
      "old_mode": 33188,
      "old_path": "gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtilsTest.java",
      "new_id": "d8177a3a6855bf881662570a30641a22438c69bd",
      "new_mode": 33188,
      "new_path": "gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtilsTest.java"
    },
    {
      "type": "modify",
      "old_id": "fe51031bab07bf5fbd0e9cc0ce8190aca207a650",
      "old_mode": 33188,
      "old_path": "gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs",
      "new_id": "85e7ae5871f9d8afc33b643a14cc3a270feff1e9",
      "new_mode": 33188,
      "new_path": "gremlin-dotnet/test/Gremlin.Net.IntegrationTest/Gherkin/Gremlin.cs"
    },
    {
      "type": "modify",
      "old_id": "d1de80cda4a4aa24d554939c2b9740302e2e2216",
      "old_mode": 33188,
      "old_path": "gremlin-go/driver/cucumber/gremlin.go",
      "new_id": "15bbb9652ff721f81bbb72f5e2c77ee350ba2da4",
      "new_mode": 33188,
      "new_path": "gremlin-go/driver/cucumber/gremlin.go"
    },
    {
      "type": "modify",
      "old_id": "a83296fcd64442808644af76ab4ecaa617bed814",
      "old_mode": 33188,
      "old_path": "gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js",
      "new_id": "b409a189b8e668ca02b7a34f1939f97d10c760b5",
      "new_mode": 33188,
      "new_path": "gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/gremlin.js"
    },
    {
      "type": "modify",
      "old_id": "3580de30dd8959803fd2493ba8a15bdb29c376eb",
      "old_mode": 33188,
      "old_path": "gremlin-python/src/main/python/tests/feature/gremlin.py",
      "new_id": "502dfa08edd7543c4fa07fd82e9ad4cebdc660ea",
      "new_mode": 33188,
      "new_path": "gremlin-python/src/main/python/tests/feature/gremlin.py"
    },
    {
      "type": "modify",
      "old_id": "9a6ec43614f5e06ed491a52a2bbccf509fa540a1",
      "old_mode": 33188,
      "old_path": "gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Sum.feature",
      "new_id": "0f2ca26cca5678371bdcec01400a78e136e3e65c",
      "new_mode": 33188,
      "new_path": "gremlin-test/src/main/resources/org/apache/tinkerpop/gremlin/test/features/map/Sum.feature"
    }
  ]
}
