)]}'
{
  "commit": "0dd525f28d87d6aef1a20b9086dbe034411604c7",
  "tree": "025b5165ae54dcc6a5018badac982422a3a2977e",
  "parents": [
    "bac26e5be18b99ab58de83689d0c5ad853474c44"
  ],
  "author": {
    "name": "Russ Cox",
    "email": "rsc@golang.org",
    "time": "Wed Aug 26 06:24:42 2026 -0400"
  },
  "committer": {
    "name": "Russ Cox",
    "email": "rsc@golang.org",
    "time": "Thu Aug 27 18:29:02 2026 -0700"
  },
  "message": "unicode/norm: compose non-Hangul runes after a Hangul syllable\n\nreorderBuffer.compose switches to combineHangul as soon as it sees a\nJamo in the segment, and combineHangul only knows the two algorithmic\nHangul rules: its default case copies the rune through without ever\nconsulting the recomposition table. So once a segment starts with a\nHangul syllable (which decomposes to L V [T], hitting isJamoVT at index\n1), every table-driven composition later in that segment was silently\ndropped.\n\nThis was latent until Unicode 17, which is the first version to add\ncanonical compositions of starter + starter, where the first starter has\nccc\u003d0 and combinesBackward and so has no boundary before it and gets\npulled into the preceding Hangul syllable\u0027s segment. Twelve targets are\naffected: Tulu-Tigalari U+113C5, U+113C7, U+113C8, Gurung Khema\nU+16121-U+16128, and Kirat Rai U+16D68.\n\nFall back to the composition table in combineHangul\u0027s default case,\nmirroring what compose does.\n\nFixes golang/go#81021.\n\nChange-Id: I1a3c343e181aa0f8d19045084c16234d9c4da29f\nReviewed-on: https://go-review.googlesource.com/c/text/+/822080\nLUCI-TryBot-Result: golang-scoped@luci-project-accounts.iam.gserviceaccount.com \u003cgolang-scoped@luci-project-accounts.iam.gserviceaccount.com\u003e\nReviewed-by: David Chase \u003cdrchase@google.com\u003e\nReviewed-by: Damien Neil \u003cdneil@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e2087bce52771ac4fc906f1afa9d27efecbac975",
      "old_mode": 33188,
      "old_path": "unicode/norm/composition.go",
      "new_id": "1ad6b5b79729fd5160ad1dddd22708deca915d98",
      "new_mode": 33188,
      "new_path": "unicode/norm/composition.go"
    },
    {
      "type": "modify",
      "old_id": "11684069d3386db2858336a509f85255cbeb523e",
      "old_mode": 33188,
      "old_path": "unicode/norm/composition_test.go",
      "new_id": "3bc034cc54843fec301a24f125750ab91b161821",
      "new_mode": 33188,
      "new_path": "unicode/norm/composition_test.go"
    }
  ]
}
