)]}'
{
  "log": [
    {
      "commit": "d357725082245ff90f5cf8800a3fc297b1f2319a",
      "tree": "cff6af86453ebb8d9af908fdc3f6f4463fefccdc",
      "parents": [
        "605884450001cb08c71ab04433c2581f25ca347c",
        "d2851df1e0341db9371c0b670e77cf8cbf55a0e7"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sat Oct 31 15:25:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Oct 31 15:25:49 2026"
      },
      "message": "Merge pull request #278 from Pitchfork-and-Torch/cook/encode-decode-non-text-type-message\n\nClarify encode/decode errors for non-text types"
    },
    {
      "commit": "d2851df1e0341db9371c0b670e77cf8cbf55a0e7",
      "tree": "cff6af86453ebb8d9af908fdc3f6f4463fefccdc",
      "parents": [
        "950ea49fbd6add8e94e8d03107b328e18450b8d1"
      ],
      "author": {
        "name": "Pitchfork-and-Torch",
        "email": "297513015+Pitchfork-and-Torch@users.noreply.github.com",
        "time": "Fri Oct 30 20:51:10 2026"
      },
      "committer": {
        "name": "Pitchfork-and-Torch",
        "email": "297513015+Pitchfork-and-Torch@users.noreply.github.com",
        "time": "Fri Oct 30 20:51:10 2026"
      },
      "message": "Quote typing.cast targets for ruff TC006\n"
    },
    {
      "commit": "950ea49fbd6add8e94e8d03107b328e18450b8d1",
      "tree": "7da029373f3c6be6341323596c460202d3bd6261",
      "parents": [
        "3cc5d599f6be7f2da49b2ae3c06afa048de801da",
        "605884450001cb08c71ab04433c2581f25ca347c"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Oct 29 16:07:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 29 16:07:14 2026"
      },
      "message": "Merge branch \u0027master\u0027 into cook/encode-decode-non-text-type-message"
    },
    {
      "commit": "605884450001cb08c71ab04433c2581f25ca347c",
      "tree": "c5add440d348c748c3b19b7195a025ddc5a7da70",
      "parents": [
        "7c55529db07b94781037703199f57fc9b7c0dc40",
        "4367172084872ef951a2485af332ac55ec7b65e4"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Oct 29 14:19:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 29 14:19:45 2026"
      },
      "message": "Merge pull request #287 from kjd/ascii-label-fast-path\n\nSkip full validation for plain lowercase LDH labels in check_label"
    },
    {
      "commit": "4367172084872ef951a2485af332ac55ec7b65e4",
      "tree": "c5add440d348c748c3b19b7195a025ddc5a7da70",
      "parents": [
        "7c55529db07b94781037703199f57fc9b7c0dc40"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Oct 29 13:48:38 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Oct 29 13:48:38 2026"
      },
      "message": "Skip full validation for plain lowercase LDH labels in check_label\n"
    },
    {
      "commit": "3cc5d599f6be7f2da49b2ae3c06afa048de801da",
      "tree": "e2a934d53764ed7c32a28b50075a3b8ccdafbac3",
      "parents": [
        "3f512e8065dbffa9ead596085d74588025e64d54"
      ],
      "author": {
        "name": "Pitchfork-and-Torch",
        "email": "297513015+Pitchfork-and-Torch@users.noreply.github.com",
        "time": "Sat Oct 24 15:56:17 2026"
      },
      "committer": {
        "name": "Pitchfork-and-Torch",
        "email": "297513015+Pitchfork-and-Torch@users.noreply.github.com",
        "time": "Sat Oct 24 15:56:17 2026"
      },
      "message": "Cast intentional bad and bytes-like inputs in the error tests so ty accepts them.\n\nencode and decode stay annotated as str or bytes or bytearray. The tests still pass None, int, list, and memoryview at runtime.\n"
    },
    {
      "commit": "3f512e8065dbffa9ead596085d74588025e64d54",
      "tree": "d12139bd4557957193595e5c121d783e6b70a8cb",
      "parents": [
        "17ce92e16c31dca03ba893e34a9578f3e219bea2",
        "7c55529db07b94781037703199f57fc9b7c0dc40"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Oct 22 08:50:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 08:50:52 2026"
      },
      "message": "Merge branch \u0027master\u0027 into cook/encode-decode-non-text-type-message"
    },
    {
      "commit": "7c55529db07b94781037703199f57fc9b7c0dc40",
      "tree": "3261a023fda4234132570f3278c63c27c60f7687",
      "parents": [
        "063da9fbdd3389750256092c1173de9ebf0fb065",
        "ad8af90cc9f1940851e63c5cd5ebebccf3583af5"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Oct 22 08:47:46 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 08:47:46 2026"
      },
      "message": "Merge pull request #283 from zydo/sweep/generator-help\n\nCorrect the Unicode table generator action in help text"
    },
    {
      "commit": "ad8af90cc9f1940851e63c5cd5ebebccf3583af5",
      "tree": "3261a023fda4234132570f3278c63c27c60f7687",
      "parents": [
        "6af72c179855c8765c1aa16f00b0183dd45dec6d",
        "063da9fbdd3389750256092c1173de9ebf0fb065"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Oct 22 08:46:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 08:46:29 2026"
      },
      "message": "Merge branch \u0027master\u0027 into sweep/generator-help"
    },
    {
      "commit": "063da9fbdd3389750256092c1173de9ebf0fb065",
      "tree": "4e431ce47283195dd72e9f2c0ccf234e6b2f4466",
      "parents": [
        "174ea2fee427ca6a1b0011827b37b60e31ffa4f6",
        "f41c88cff4c87f377cba958bb191107169cf57cd"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Oct 22 08:44:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 08:44:07 2026"
      },
      "message": "Merge pull request #284 from zydo/sweep/error-code-doc\n\nRemove inaccurate error-code documentation claim"
    },
    {
      "commit": "f41c88cff4c87f377cba958bb191107169cf57cd",
      "tree": "4e431ce47283195dd72e9f2c0ccf234e6b2f4466",
      "parents": [
        "bb84f02a67dea3a9d2423bab901787f2c9f0d3df",
        "174ea2fee427ca6a1b0011827b37b60e31ffa4f6"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Oct 22 08:43:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 08:43:25 2026"
      },
      "message": "Merge branch \u0027master\u0027 into sweep/error-code-doc"
    },
    {
      "commit": "174ea2fee427ca6a1b0011827b37b60e31ffa4f6",
      "tree": "b1ee414ec60ddc39268df7d1a30fa0e26fcf837f",
      "parents": [
        "9470c2f69353b2e675f101bd840bec46f206676d",
        "3265d0bd50666cbe2424a05f537457e59e0cc475"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Oct 22 08:42:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 08:42:20 2026"
      },
      "message": "Merge pull request #285 from kjd/deprecate-python-3.9\n\nRaise minimum Python to 3.10"
    },
    {
      "commit": "17ce92e16c31dca03ba893e34a9578f3e219bea2",
      "tree": "1cc6cba1ff9f1c242aa59f606c81d0060bfec0dd",
      "parents": [
        "205baad310d45fe6a9d9279ed5e7e87ccf2421d3",
        "9470c2f69353b2e675f101bd840bec46f206676d"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Oct 22 08:09:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 22 08:09:11 2026"
      },
      "message": "Merge branch \u0027master\u0027 into cook/encode-decode-non-text-type-message"
    },
    {
      "commit": "6af72c179855c8765c1aa16f00b0183dd45dec6d",
      "tree": "d684b3113057b63d7b506895dd8103c625e00248",
      "parents": [
        "9470c2f69353b2e675f101bd840bec46f206676d"
      ],
      "author": {
        "name": "Ziyu Dong",
        "email": "zydo.git@gmail.com",
        "time": "Wed Oct 21 22:48:50 2026"
      },
      "committer": {
        "name": "Ziyu Dong",
        "email": "zydo.git@gmail.com",
        "time": "Wed Oct 21 22:48:50 2026"
      },
      "message": "Correct the Unicode table generator action in help text\n"
    },
    {
      "commit": "bb84f02a67dea3a9d2423bab901787f2c9f0d3df",
      "tree": "a83dbf418071dfdafa8b246229de04f3fb683076",
      "parents": [
        "9470c2f69353b2e675f101bd840bec46f206676d"
      ],
      "author": {
        "name": "Ziyu Dong",
        "email": "zydo.git@gmail.com",
        "time": "Wed Oct 21 22:48:50 2026"
      },
      "committer": {
        "name": "Ziyu Dong",
        "email": "zydo.git@gmail.com",
        "time": "Wed Oct 21 22:48:50 2026"
      },
      "message": "Remove inaccurate error-code documentation claim\n"
    },
    {
      "commit": "3265d0bd50666cbe2424a05f537457e59e0cc475",
      "tree": "b1ee414ec60ddc39268df7d1a30fa0e26fcf837f",
      "parents": [
        "9470c2f69353b2e675f101bd840bec46f206676d"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Oct 11 23:20:32 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Oct 11 23:20:32 2026"
      },
      "message": "Raise minimum Python to 3.10\n"
    },
    {
      "commit": "205baad310d45fe6a9d9279ed5e7e87ccf2421d3",
      "tree": "bf74ee76e043c5513e0acde689f6e942c2ee9e86",
      "parents": [
        "ad116d30568302bfc7e3b4009fe7c03392b68f13"
      ],
      "author": {
        "name": "Pitchfork-and-Torch",
        "email": "297513015+Pitchfork-and-Torch@users.noreply.github.com",
        "time": "Wed Oct 07 00:28:54 2026"
      },
      "committer": {
        "name": "Pitchfork-and-Torch",
        "email": "297513015+Pitchfork-and-Torch@users.noreply.github.com",
        "time": "Wed Oct 07 00:28:54 2026"
      },
      "message": "Use a TypeError split for non-text encode and decode input\n\nKeep str(s, \"ascii\") so any bytes-like object still works. UnicodeDecodeError keeps the existing messages. TypeError now names the type. Drop the memoryview special case and the wrong annotations on ulabel and check_label.\n"
    },
    {
      "commit": "9470c2f69353b2e675f101bd840bec46f206676d",
      "tree": "1c49873f67be3dca4839ecec8a3f20fefa015ec4",
      "parents": [
        "c79316ffefd06e7fcd05d33a57e3f0a4fd1c2f5d",
        "5e92badc58fdc3ad838277007402596135592efe"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Oct 07 00:14:28 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Oct 07 00:14:28 2026"
      },
      "message": "Merge pull request #280 from kjd/dependabot/github_actions/actions-151ba0d261\n\nBump actions/setup-python from 6.2.0 to 7.0.0 in the actions group"
    },
    {
      "commit": "5e92badc58fdc3ad838277007402596135592efe",
      "tree": "1c49873f67be3dca4839ecec8a3f20fefa015ec4",
      "parents": [
        "c79316ffefd06e7fcd05d33a57e3f0a4fd1c2f5d"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Thu Oct 01 15:26:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Oct 01 15:26:31 2026"
      },
      "message": "Bump actions/setup-python from 6.2.0 to 7.0.0 in the actions group\n\nBumps the actions group with 1 update: [actions/setup-python](https://github.com/actions/setup-python).\n\n\nUpdates `actions/setup-python` from 6.2.0 to 7.0.0\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/a309ff8b426b58ec0e2a45f0f869d46889d02405...5fda3b95a4ea91299a34e894583c3862153e4b97)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n  dependency-version: 7.0.0\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n  dependency-group: actions\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "ad116d30568302bfc7e3b4009fe7c03392b68f13",
      "tree": "9afe01aa05785fd207efb93715ac6e627a16ca86",
      "parents": [
        "de8adbba1839629b24b144d80e21d662f7f02ea0"
      ],
      "author": {
        "name": "Jon Bailey",
        "email": "297513015+Pitchfork-and-Torch@users.noreply.github.com",
        "time": "Mon Sep 21 23:46:34 2026"
      },
      "committer": {
        "name": "Jon Bailey",
        "email": "297513015+Pitchfork-and-Torch@users.noreply.github.com",
        "time": "Mon Sep 21 23:46:34 2026"
      },
      "message": "Accept memoryview in encode and decode so the codec path still works."
    },
    {
      "commit": "de8adbba1839629b24b144d80e21d662f7f02ea0",
      "tree": "26bedf7d12943ffd69b8287640e45153bf7e457b",
      "parents": [
        "c79316ffefd06e7fcd05d33a57e3f0a4fd1c2f5d"
      ],
      "author": {
        "name": "Pitchfork-and-Torch",
        "email": "pitchfork-and-torch@users.noreply.github.com",
        "time": "Fri Sep 18 02:26:32 2026"
      },
      "committer": {
        "name": "Pitchfork-and-Torch",
        "email": "pitchfork-and-torch@users.noreply.github.com",
        "time": "Fri Sep 18 02:26:32 2026"
      },
      "message": "Clarify encode/decode errors for non-text types\n\nPassing None/int/list to encode() or decode() raised IDNAError with a\nmisleading \"byte string\" message (from catching TypeError from\nstr(..., \"ascii\")). Accept str/bytes/bytearray explicitly and report\nthe actual type for other values.\n"
    },
    {
      "commit": "c79316ffefd06e7fcd05d33a57e3f0a4fd1c2f5d",
      "tree": "42e06e3fbf935ba31a57d51f177456b021ee6b97",
      "parents": [
        "b6cce8523eae3442aba976f01607b1cdf797c6ff",
        "d55e65e1a3b1ede7f556bc202738066f5597e249"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Sep 17 14:13:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 14:13:44 2026"
      },
      "message": "Merge pull request #277 from kjd/release-3.20\n\nRelease 3.20"
    },
    {
      "commit": "d55e65e1a3b1ede7f556bc202738066f5597e249",
      "tree": "42e06e3fbf935ba31a57d51f177456b021ee6b97",
      "parents": [
        "0c0824a928e50048e59d4ce55fe760dba30528bc"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Sep 17 14:09:48 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Sep 17 14:09:48 2026"
      },
      "message": "Release 3.20\n"
    },
    {
      "commit": "0c0824a928e50048e59d4ce55fe760dba30528bc",
      "tree": "4b89b4832638eb7c59b6f1db36bb1b04d68efd52",
      "parents": [
        "bd7c316a08761c79ba557b5b9e6a3da24d71fa88"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Sep 16 17:26:32 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Sep 16 17:26:32 2026"
      },
      "message": "Pre-release 3.20rc0\n"
    },
    {
      "commit": "bd7c316a08761c79ba557b5b9e6a3da24d71fa88",
      "tree": "20905dd6b546c555549d388f2a92947db560d58d",
      "parents": [
        "b6cce8523eae3442aba976f01607b1cdf797c6ff"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Sep 16 17:26:32 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Sep 16 17:26:32 2026"
      },
      "message": "Note Python 3.15 support in the 3.20 changelog\n"
    },
    {
      "commit": "b6cce8523eae3442aba976f01607b1cdf797c6ff",
      "tree": "1b9ee491d0da76e2d1ba90d5204970b3a07a011a",
      "parents": [
        "dfab5a06affddcc7781a7bbab1cac1bb7d3b4e05",
        "9a4bc59e9d5ab89e7916fc0a50650cb55e3faf26"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Sep 16 15:54:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 16 15:54:36 2026"
      },
      "message": "Merge pull request #276 from kjd/unicode-18\n\nUpdate to Unicode 18.0.0 (fixes #275)"
    },
    {
      "commit": "9a4bc59e9d5ab89e7916fc0a50650cb55e3faf26",
      "tree": "1b9ee491d0da76e2d1ba90d5204970b3a07a011a",
      "parents": [
        "dfab5a06affddcc7781a7bbab1cac1bb7d3b4e05"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Sep 16 15:49:21 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Sep 16 15:49:21 2026"
      },
      "message": "Update to Unicode 18.0.0\n"
    },
    {
      "commit": "dfab5a06affddcc7781a7bbab1cac1bb7d3b4e05",
      "tree": "ea7e966197586c762d614e1f87a668971a1f8a6d",
      "parents": [
        "417c35496ccbffad4b0a434ac9b563ee6f8fa0a9",
        "d6ee690bf133e874351103b9fe838fdda2a7a09f"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Sep 16 15:43:29 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Sep 16 15:43:29 2026"
      },
      "message": "Merge branch \u0027python-3.15\u0027\n"
    },
    {
      "commit": "417c35496ccbffad4b0a434ac9b563ee6f8fa0a9",
      "tree": "03a47542c1c337bb982811e2ae878c5f23ceff04",
      "parents": [
        "cd1739200f3bf07871372bcb31c271de136eaccf"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Sep 16 15:37:04 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Sep 16 15:37:04 2026"
      },
      "message": "Read the latest Unicode version from the DerivedAge.txt header instead of the ReadMe prose\n"
    },
    {
      "commit": "cd1739200f3bf07871372bcb31c271de136eaccf",
      "tree": "354f313ee0bec173b1fe9924516c5d2e5493914d",
      "parents": [
        "e2073db14d28d1c3299649dd0c2dd4205b43ebfd",
        "c5796d79d44c76a54f03e8938dd22edaa1221c27"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Sep 07 13:48:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 07 13:48:10 2026"
      },
      "message": "Merge pull request #274 from kjd/fix-decode-length-check\n\nSkip the decode round-trip check for domains past encode\u0027s length limit"
    },
    {
      "commit": "c5796d79d44c76a54f03e8938dd22edaa1221c27",
      "tree": "354f313ee0bec173b1fe9924516c5d2e5493914d",
      "parents": [
        "e2073db14d28d1c3299649dd0c2dd4205b43ebfd"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Sep 07 13:40:21 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Sep 07 13:40:21 2026"
      },
      "message": "Skip the decode round-trip check for domains past encode\u0027s length limit\n\ndecode() deliberately allows the trailing-dot octet whether or not one\nis present, since UTS #46 ToUnicode checks no lengths, so a 254-octet\ndomain without a trailing dot decodes but is rejected by encode().\nFixes OSS-Fuzz 4694619275984896.\n"
    },
    {
      "commit": "d6ee690bf133e874351103b9fe838fdda2a7a09f",
      "tree": "487cc815e3a24e4a358680f0b7266e43cba24230",
      "parents": [
        "e2073db14d28d1c3299649dd0c2dd4205b43ebfd"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Aug 20 06:13:25 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Aug 20 06:13:25 2026"
      },
      "message": "Update to Python 3.15 release candidate in CI and add trove classifier\n"
    },
    {
      "commit": "e2073db14d28d1c3299649dd0c2dd4205b43ebfd",
      "tree": "af8158ce77eeff9ed222c9f67487ad60af799e98",
      "parents": [
        "a5d90c6ed8279a3ca6a39ad10fed84f46b797287",
        "cba1f53e9ef351e747f7290ba369c0d567eab3fc"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Aug 20 04:12:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 04:12:48 2026"
      },
      "message": "Merge pull request #272 from kjd/condense-exception-attrs-doc\n\nCondense the README section on machine-readable exception attributes"
    },
    {
      "commit": "cba1f53e9ef351e747f7290ba369c0d567eab3fc",
      "tree": "af8158ce77eeff9ed222c9f67487ad60af799e98",
      "parents": [
        "f7c797d9431f54500cf5fe4e3bb68252c10459c3"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Aug 20 03:58:24 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Aug 20 03:58:35 2026"
      },
      "message": "Drop the README table cross-check now that the code list is not documented there\n"
    },
    {
      "commit": "f7c797d9431f54500cf5fe4e3bb68252c10459c3",
      "tree": "e7ce93c772b97627ff745cb10d0c60db6e045747",
      "parents": [
        "d7b6f0501b64abfbc7918332cc0bdc099376bc76",
        "a5d90c6ed8279a3ca6a39ad10fed84f46b797287"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Aug 20 03:55:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 03:55:00 2026"
      },
      "message": "Merge branch \u0027master\u0027 into condense-exception-attrs-doc"
    },
    {
      "commit": "d7b6f0501b64abfbc7918332cc0bdc099376bc76",
      "tree": "c88103f77c0d42f2595920b5fad7f830b09ff020",
      "parents": [
        "2798a9afce01a98af425351bbac070a4f7410616"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Aug 20 03:48:59 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu Aug 20 03:48:59 2026"
      },
      "message": "Condense the README section on machine-readable exception attributes\n"
    },
    {
      "commit": "a5d90c6ed8279a3ca6a39ad10fed84f46b797287",
      "tree": "389f1ea72569082e8accc8edf6007d9bdbb6a0a3",
      "parents": [
        "2798a9afce01a98af425351bbac070a4f7410616",
        "b90f25be787d64df8158c002c5697682e4a2bcdf"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 16:46:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 16:46:30 2026"
      },
      "message": "Merge pull request #271 from kjd/fix-fuzz-length-findings\n\nFix fuzz length findings"
    },
    {
      "commit": "b90f25be787d64df8158c002c5697682e4a2bcdf",
      "tree": "389f1ea72569082e8accc8edf6007d9bdbb6a0a3",
      "parents": [
        "bc8622a36c4dcdf38a7d1f178966506fd0e661a8"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 16:32:06 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 16:35:37 2026"
      },
      "message": "Skip the uts46_remap idempotency check when mapping expands past the input cap\n"
    },
    {
      "commit": "bc8622a36c4dcdf38a7d1f178966506fd0e661a8",
      "tree": "ddb1b360e17482c2514bd897cdd205c02786185d",
      "parents": [
        "2798a9afce01a98af425351bbac070a4f7410616"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 16:32:06 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 16:35:37 2026"
      },
      "message": "Enforce the whole-domain length limit in the incremental idna2008 codec\n"
    },
    {
      "commit": "2798a9afce01a98af425351bbac070a4f7410616",
      "tree": "0d8a23abf3fe1ae2dafe18fed21c2b557b7b3ac7",
      "parents": [
        "5d4f189856819a1c6bea79a7688d68d5a39c615c",
        "0d379e10eb8b08b5fc0281d1a030a3b7bd6c2ab3"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 05:25:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 05:25:30 2026"
      },
      "message": "Merge pull request #270 from kjd/fix-history-date\n\nAdd 3.19 release date"
    },
    {
      "commit": "0d379e10eb8b08b5fc0281d1a030a3b7bd6c2ab3",
      "tree": "0d8a23abf3fe1ae2dafe18fed21c2b557b7b3ac7",
      "parents": [
        "5d4f189856819a1c6bea79a7688d68d5a39c615c"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 05:20:39 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 05:20:39 2026"
      },
      "message": "Add 3.19 release date\n"
    },
    {
      "commit": "5d4f189856819a1c6bea79a7688d68d5a39c615c",
      "tree": "71e74744c8e0814e9a763ac757e8f6c42d636935",
      "parents": [
        "5cce1308d148019c5fa0febceafa13e99cdacfe7",
        "03a9a11dd8aecd4fea742cabe20f4d3d9ed82abb"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 05:17:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 05:17:36 2026"
      },
      "message": "Merge pull request #269 from kjd/release-3.19\n\nRelease 3.19"
    },
    {
      "commit": "03a9a11dd8aecd4fea742cabe20f4d3d9ed82abb",
      "tree": "71e74744c8e0814e9a763ac757e8f6c42d636935",
      "parents": [
        "2d2a7ef0c59210a48407b3dde6d884933cecf093"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 05:10:29 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 05:10:29 2026"
      },
      "message": "Release 3.19\n"
    },
    {
      "commit": "2d2a7ef0c59210a48407b3dde6d884933cecf093",
      "tree": "03e6324cec8c3bb40c39bee215a094af8707f41b",
      "parents": [
        "5cce1308d148019c5fa0febceafa13e99cdacfe7"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 05:05:50 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 05:05:50 2026"
      },
      "message": "Pre-release 3.19rc0\n"
    },
    {
      "commit": "5cce1308d148019c5fa0febceafa13e99cdacfe7",
      "tree": "1daa5af995a35ea533abab89202f766e46f66e28",
      "parents": [
        "ce9fd98ac4073866db276e93834b259f2a5a4ac4",
        "3914b75f3e4cbc11e59f92eeecdb16d10871e57f"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 05:01:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 05:01:38 2026"
      },
      "message": "Merge pull request #268 from kjd/fix-std3-regex-alert\n\nSplit the STD3 disallowed-character range so uppercase is explicit"
    },
    {
      "commit": "3914b75f3e4cbc11e59f92eeecdb16d10871e57f",
      "tree": "1daa5af995a35ea533abab89202f766e46f66e28",
      "parents": [
        "ce9fd98ac4073866db276e93834b259f2a5a4ac4"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 04:31:17 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 04:31:17 2026"
      },
      "message": "Split the STD3 disallowed-character range so uppercase is explicit\n"
    },
    {
      "commit": "ce9fd98ac4073866db276e93834b259f2a5a4ac4",
      "tree": "38f292b7f88a0b5baca1f6f94c90a5dcb630db13",
      "parents": [
        "35c57f2bc15e4e63592850b194abb16a64246783",
        "809240c3cc9358c9c9c79b2d12ffe39e75ccfb0f"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 03:28:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 18 03:28:02 2026"
      },
      "message": "Merge pull request #267 from kjd/housekeeping\n\nHousekeeping"
    },
    {
      "commit": "809240c3cc9358c9c9c79b2d12ffe39e75ccfb0f",
      "tree": "38f292b7f88a0b5baca1f6f94c90a5dcb630db13",
      "parents": [
        "d9e16c523d7d25dcc14100fa80f3e303404e09be"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 03:05:33 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Aug 18 03:05:33 2026"
      },
      "message": "Fail CI when the license copyright year is behind the current year\n"
    },
    {
      "commit": "d9e16c523d7d25dcc14100fa80f3e303404e09be",
      "tree": "96fe425137ed5bab3edee6580c3f1055865c4360",
      "parents": [
        "ef30feeed3a758e96286fdab0315a551f7f5e7d6"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 19:23:27 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 19:23:27 2026"
      },
      "message": "Consolidate test fixtures, prune stale gitignore entries, and fix doc typos\n"
    },
    {
      "commit": "ef30feeed3a758e96286fdab0315a551f7f5e7d6",
      "tree": "81dd5f21646980a8715996332df91894aa2020d7",
      "parents": [
        "b907913f854d26cc714f721c6c2cb626d41ac468"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 19:21:51 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 19:21:51 2026"
      },
      "message": "Remove dead code and pare back superfluous comments\n"
    },
    {
      "commit": "b907913f854d26cc714f721c6c2cb626d41ac468",
      "tree": "122c1cd1ad2f87dbe5c67641641eec20961a38ba",
      "parents": [
        "6204cbe343ef438df7c58bc80b94d0f960991d90"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 19:10:52 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 19:10:52 2026"
      },
      "message": "Tighten the version support and Unicode notes in the README\n"
    },
    {
      "commit": "6204cbe343ef438df7c58bc80b94d0f960991d90",
      "tree": "14a1f024077eaa2da2955bd138f27edb9947949d",
      "parents": [
        "35c57f2bc15e4e63592850b194abb16a64246783"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 19:09:00 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 19:10:45 2026"
      },
      "message": "Ignore local build artifacts and stop packaging stray tooling config\n"
    },
    {
      "commit": "35c57f2bc15e4e63592850b194abb16a64246783",
      "tree": "f2adacc334bfab9c2221f318cade0a4bde076aea",
      "parents": [
        "880ea904d1d32314bbf6df5e0eeee698f3bd7ba4",
        "2d62fb816ca84c461f1a9bf249f935e4a2c19f9f"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 18:57:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 18:57:17 2026"
      },
      "message": "Merge pull request #266 from kjd/unicode-version-and-ci-checks\n\nUnicode version and ci checks"
    },
    {
      "commit": "2d62fb816ca84c461f1a9bf249f935e4a2c19f9f",
      "tree": "f2adacc334bfab9c2221f318cade0a4bde076aea",
      "parents": [
        "7d06ef685de7a052230b440ede2f2b840d1ca817"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 18:51:58 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 18:51:58 2026"
      },
      "message": "Look up sys._is_gil_enabled dynamically so type checking against Python 3.9 passes\n"
    },
    {
      "commit": "7d06ef685de7a052230b440ede2f2b840d1ca817",
      "tree": "12186814706bf430472281d086a0cd4642931c2f",
      "parents": [
        "d67cca071eb3f230617f64c17b7021101bc082b9"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 18:41:43 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 18:41:43 2026"
      },
      "message": "Measure test coverage in CI on CPython and fail below 95%\n"
    },
    {
      "commit": "d67cca071eb3f230617f64c17b7021101bc082b9",
      "tree": "73d4845a0c97388aabf2472235465269ad359a24",
      "parents": [
        "9e2ef62db2ebee0079aa3044b4418897dbc65c9e"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 18:34:46 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 18:34:46 2026"
      },
      "message": "Test on free-threaded Python with the GIL disabled and document thread safety\n"
    },
    {
      "commit": "9e2ef62db2ebee0079aa3044b4418897dbc65c9e",
      "tree": "3eb31a9f555651ed5abca279295feec39646c1f1",
      "parents": [
        "880ea904d1d32314bbf6df5e0eeee698f3bd7ba4"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 18:31:40 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 18:31:40 2026"
      },
      "message": "Expose the Unicode version of the generated tables as idna.unicode_version\n"
    },
    {
      "commit": "880ea904d1d32314bbf6df5e0eeee698f3bd7ba4",
      "tree": "640648e80b408e5dc0fdfbce7dfdffb1a27d7976",
      "parents": [
        "9984fc1dead9cccd037307b12f42c4c67e4927f6",
        "4d7df15d9eb50f61868b3f8e8055bf24080ba651"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 18:12:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 18:12:56 2026"
      },
      "message": "Merge pull request #265 from kjd/structured-attributes\n\nStructured attributes"
    },
    {
      "commit": "4d7df15d9eb50f61868b3f8e8055bf24080ba651",
      "tree": "640648e80b408e5dc0fdfbce7dfdffb1a27d7976",
      "parents": [
        "4130d91cdf7e9c37856e4f40f842f6087317d400"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 18:05:23 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 18:05:23 2026"
      },
      "message": "Give the CI jobs descriptive names and rename the test job from build to test\n"
    },
    {
      "commit": "4130d91cdf7e9c37856e4f40f842f6087317d400",
      "tree": "f74d6d5af5b8f8f74ef8d4d1093d10996d9a6be2",
      "parents": [
        "c1014f4eb87987892dd47eff1ecc3cc8e28dc4ca"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 17:56:53 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 17:56:53 2026"
      },
      "message": "Force-reinstall the built wheel before testing it so the PyPI release pulled in by twine is not tested instead\n"
    },
    {
      "commit": "c1014f4eb87987892dd47eff1ecc3cc8e28dc4ca",
      "tree": "945755465d7167f1acde2196e100d5526fc9a528",
      "parents": [
        "381a69646ff3f564b6d15ac15301497d0e8c4f42"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 17:47:46 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 17:47:46 2026"
      },
      "message": "Drop hash pinning of the build toolchain, which broke on Linux-only dependencies\n"
    },
    {
      "commit": "381a69646ff3f564b6d15ac15301497d0e8c4f42",
      "tree": "8b885801b34e7a5328bf7f61c5f04753989260a3",
      "parents": [
        "cfc3f48d78c3348b61303d0579f42b2fe38790ed"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 17:33:25 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 17:33:25 2026"
      },
      "message": "Remove redundant comments\n"
    },
    {
      "commit": "cfc3f48d78c3348b61303d0579f42b2fe38790ed",
      "tree": "df67db1711e97a56759157a50b98a08d3a57d7fc",
      "parents": [
        "11e56d8bb6cd1ff71c68126b857c5ccf49aa09a3"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 17:16:58 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 17:16:58 2026"
      },
      "message": "Add hypothesis and ty to the all extra so it covers the full test and lint toolchain\n"
    },
    {
      "commit": "11e56d8bb6cd1ff71c68126b857c5ccf49aa09a3",
      "tree": "3d97e3cc73a55c9c746978d1ec7d6f41c666cbd5",
      "parents": [
        "cdc69bd33f616e75b38686e5a99dbffd5e45b982"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 17:16:58 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 17:16:58 2026"
      },
      "message": "Fetch Unicode data with a timeout and write cache files atomically\n"
    },
    {
      "commit": "cdc69bd33f616e75b38686e5a99dbffd5e45b982",
      "tree": "dc9970c4614df6c2690ffc5d123224fb41c9bb4b",
      "parents": [
        "39175fa435ec0591d884b312439b2cbf67b09427"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 07:00:55 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 07:00:55 2026"
      },
      "message": "Publish only hash-pinned, tested distributions from version tags and take release notes from HISTORY.md\n"
    },
    {
      "commit": "39175fa435ec0591d884b312439b2cbf67b09427",
      "tree": "46d067b76274f893b6e8339bb36bb80d75f001c2",
      "parents": [
        "5a0c98aaf338405362aa994f0f5555013f7b3186"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 06:52:01 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 06:52:01 2026"
      },
      "message": "Make the deprecated transitional argument a no-op so deviation characters are always kept\n"
    },
    {
      "commit": "5a0c98aaf338405362aa994f0f5555013f7b3186",
      "tree": "107aa87e511a6f8ef061a140bdc101f2687402c3",
      "parents": [
        "4c5c42775950b31b21029fe90d40d2faa1fb47ba"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 06:51:24 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Aug 17 06:51:47 2026"
      },
      "message": "Reject A-labels that are not the canonical Punycode encoding of their U-label\n"
    },
    {
      "commit": "4c5c42775950b31b21029fe90d40d2faa1fb47ba",
      "tree": "5de633d31b1f5ebdf27502a2aba6bef243f20903",
      "parents": [
        "5b5a9afe764acf9a6c99d25dd5db740bb895710b"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 19:49:06 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 19:49:06 2026"
      },
      "message": "Simulate unknown bidi directionality in tests since Python 3.15 reports a default class for every codepoint\n"
    },
    {
      "commit": "5b5a9afe764acf9a6c99d25dd5db740bb895710b",
      "tree": "de9216fe41403956524c367894ba24f8e5e66389",
      "parents": [
        "5e6e75291d71a2fdae04f4c1aba9fc679871cda9"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 19:36:04 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 19:36:53 2026"
      },
      "message": "Add a stable code attribute to IDNAError identifying the rule that failed\n"
    },
    {
      "commit": "5e6e75291d71a2fdae04f4c1aba9fc679871cda9",
      "tree": "e40538a56d5c8919c2a4c403070e51dc2be1fc36",
      "parents": [
        "6ac8a0ab21dffed6b651c0428e675b5e7bbbd1e4"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 19:25:03 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 19:25:03 2026"
      },
      "message": "Carry the offending codepoint and its position as attributes on IDNAError\n"
    },
    {
      "commit": "6ac8a0ab21dffed6b651c0428e675b5e7bbbd1e4",
      "tree": "a480a5d49e61624559344a99ca90479e02e6c126",
      "parents": [
        "9984fc1dead9cccd037307b12f42c4c67e4927f6"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 19:21:26 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 19:21:26 2026"
      },
      "message": "Do not assert uts46_remap idempotence under transitional processing\n"
    },
    {
      "commit": "9984fc1dead9cccd037307b12f42c4c67e4927f6",
      "tree": "8a5aebc8ab57d5aeae499f0a9bd7b89f08217b67",
      "parents": [
        "ec110d02a6e97a5be1f707de260cb44795f7e803",
        "245ad41cd2aed4bd919a4d71ff4cc60a8d24a03e"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 18:22:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 18:22:10 2026"
      },
      "message": "Merge pull request #264 from kjd/general-improvements\n\nGeneral improvements"
    },
    {
      "commit": "245ad41cd2aed4bd919a4d71ff4cc60a8d24a03e",
      "tree": "8a5aebc8ab57d5aeae499f0a9bd7b89f08217b67",
      "parents": [
        "c1cd0dc02ec6be07988c3fedb7df04ec2a754329"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 07:54:57 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 18:15:23 2026"
      },
      "message": "Draft history entries for 3.19\n"
    },
    {
      "commit": "c1cd0dc02ec6be07988c3fedb7df04ec2a754329",
      "tree": "4f45a86743c9b0629d01eb9f38232c41a392d33c",
      "parents": [
        "a7070b33f0c9594e26363e6b1fb9b457a47aa8c2"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 07:47:13 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 16:58:17 2026"
      },
      "message": "Restore std3_rules by applying UseSTD3ASCIIRules to the mapped output per UTS #46 revision 33\n"
    },
    {
      "commit": "a7070b33f0c9594e26363e6b1fb9b457a47aa8c2",
      "tree": "bb184243d70e137dc52872c49a92723ed67caf77",
      "parents": [
        "fe4ae48b87136fd2a1835b7f67d615318891d8cc"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 07:36:38 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 16:58:17 2026"
      },
      "message": "Speed up uts46_remap with an ASCII fast path and run-based copying\n"
    },
    {
      "commit": "fe4ae48b87136fd2a1835b7f67d615318891d8cc",
      "tree": "d7c66711689937303609e3ccdfa63d19800e9621",
      "parents": [
        "59ba52b1fc6afa4eb2590f0738a78a444d8f6523"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 07:27:29 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 16:58:17 2026"
      },
      "message": "Add OSS-Fuzz targets for the full API and the incremental codec\n"
    },
    {
      "commit": "59ba52b1fc6afa4eb2590f0738a78a444d8f6523",
      "tree": "75b60e1548fa6b107ef11e3049f0254629bdb5ae",
      "parents": [
        "1c6f4a4d152e43419577f2db0893fb8dbdd248db"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 07:27:29 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 07:27:29 2026"
      },
      "message": "Add property-based tests with Hypothesis\n"
    },
    {
      "commit": "1c6f4a4d152e43419577f2db0893fb8dbdd248db",
      "tree": "8bf86fc3f4830c6658ebec2b38f4cf2868424686",
      "parents": [
        "63a64a8e63ffb01e608556974f296cd041d1a81a"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 07:27:29 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 07:27:29 2026"
      },
      "message": "Raise IDNAError rather than IndexError or UnicodeDecodeError on empty labels and non-ASCII bytes\n"
    },
    {
      "commit": "63a64a8e63ffb01e608556974f296cd041d1a81a",
      "tree": "e5dd83004e0df30b67269d7c88bf52ee09bbc75b",
      "parents": [
        "7278b7a4f2fb902a8b89c608a65b7d91040847d5"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 07:27:29 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 07:27:29 2026"
      },
      "message": "Publish to TestPyPI only from master, release branches and tags\n"
    },
    {
      "commit": "7278b7a4f2fb902a8b89c608a65b7d91040847d5",
      "tree": "54f50771054b07cb4443a2cc311d9401573a36bb",
      "parents": [
        "babf1947480748f06ac68c34e4795302c7b56291"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 07:27:29 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 07:27:29 2026"
      },
      "message": "Add scheduled workflow that opens an issue when a new Unicode version is released\n"
    },
    {
      "commit": "babf1947480748f06ac68c34e4795302c7b56291",
      "tree": "58802a3aafc61ec6b8fb817984be7dee78c88e94",
      "parents": [
        "1fe72ab8fd6ee178a478cff839aff9005555e3cf"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 07:27:29 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 07:27:29 2026"
      },
      "message": "Verify checked-in tables match the generator output in CI\n"
    },
    {
      "commit": "1fe72ab8fd6ee178a478cff839aff9005555e3cf",
      "tree": "1a5100ce1d982c948ab1c29438f3b27b690856a4",
      "parents": [
        "ec110d02a6e97a5be1f707de260cb44795f7e803"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 07:27:29 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 07:27:29 2026"
      },
      "message": "Make idna-data output independent of the host Python\u0027s Unicode version\n"
    },
    {
      "commit": "ec110d02a6e97a5be1f707de260cb44795f7e803",
      "tree": "c8f704306400bde73a23065e526070e6bec1333b",
      "parents": [
        "b54576b13fd31e0d5b51ba9ce36d018feeeebaec",
        "3187398b94ffe3bf0743e50a344588e0458d9ed9"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 06:55:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 16 06:55:20 2026"
      },
      "message": "Merge pull request #262 from kjd/ruff-update\n\nUpdate to ruff 0.16 and adopt its expanded default rule set"
    },
    {
      "commit": "3187398b94ffe3bf0743e50a344588e0458d9ed9",
      "tree": "c8f704306400bde73a23065e526070e6bec1333b",
      "parents": [
        "b54576b13fd31e0d5b51ba9ce36d018feeeebaec"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 05:00:29 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun Aug 16 05:00:29 2026"
      },
      "message": "Update to ruff 0.16 and adopt its expanded default rule set\n"
    },
    {
      "commit": "b54576b13fd31e0d5b51ba9ce36d018feeeebaec",
      "tree": "1c9829596bd172624130429602bfb85f770da6b5",
      "parents": [
        "62f30346a210028aa37b9002c3e4814a2c06416a",
        "fae77295f4540fa3ec027e677543e17239b27951"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sat Aug 08 23:01:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 08 23:01:00 2026"
      },
      "message": "Merge pull request #261 from kjd/issue-260 (fixes #260)\n\nIssue 260 fix"
    },
    {
      "commit": "fae77295f4540fa3ec027e677543e17239b27951",
      "tree": "1c9829596bd172624130429602bfb85f770da6b5",
      "parents": [
        "9067b803a55441805934410b11c0899209b66785"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sat Aug 08 22:56:41 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sat Aug 08 22:56:41 2026"
      },
      "message": "Bump pypa/gh-action-pypi-publish to v1.14.2 for metadata 2.5 support\n"
    },
    {
      "commit": "9067b803a55441805934410b11c0899209b66785",
      "tree": "7b5f0a5576e66076a17665f55d33ba7a78ec0236",
      "parents": [
        "62f30346a210028aa37b9002c3e4814a2c06416a"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sat Aug 08 21:54:47 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sat Aug 08 21:57:02 2026"
      },
      "message": "Fix CONTEXTJ violations being masked as generic IDNAError (#260)\n"
    },
    {
      "commit": "62f30346a210028aa37b9002c3e4814a2c06416a",
      "tree": "86d4b82c0ac3fbb3e98dba02e426571d4d9ae1c7",
      "parents": [
        "5a954ffed62b15e2a313e5de0f949f60ed15416e",
        "90020dedbaba8151fbed01888874e5078bb94b55"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sat Aug 01 15:50:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 01 15:50:57 2026"
      },
      "message": "Merge pull request #259 from kjd/unicode-license\n\nUnicode license (closes #258)"
    },
    {
      "commit": "90020dedbaba8151fbed01888874e5078bb94b55",
      "tree": "86d4b82c0ac3fbb3e98dba02e426571d4d9ae1c7",
      "parents": [
        "82a3713d71a98f63d8fc9c00f4be98803451378b"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sat Aug 01 15:40:54 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sat Aug 01 15:43:01 2026"
      },
      "message": "Adding original text makes Github reclassify the whole project, try this instead\n"
    },
    {
      "commit": "82a3713d71a98f63d8fc9c00f4be98803451378b",
      "tree": "c70db7132fe20dfc63f6ad7253ca21cc1ea20b43",
      "parents": [
        "5a954ffed62b15e2a313e5de0f949f60ed15416e"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sat Aug 01 15:32:10 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sat Aug 01 15:37:48 2026"
      },
      "message": "Add reference to Unicode license\n"
    },
    {
      "commit": "5a954ffed62b15e2a313e5de0f949f60ed15416e",
      "tree": "86bb29081b16d256f7e44617b28087d3eb9fd211",
      "parents": [
        "862150e12779792900343b48a1223beb5e2b62f7",
        "7af9334440bc40b883cc9567201fa0d5004f3b7e"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Jul 01 17:26:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 17:26:14 2026"
      },
      "message": "Merge pull request #256 from kjd/dependabot/github_actions/actions-2217aebe03\n\nBump actions/checkout from 6.0.2 to 7.0.0 in the actions group"
    },
    {
      "commit": "7af9334440bc40b883cc9567201fa0d5004f3b7e",
      "tree": "86bb29081b16d256f7e44617b28087d3eb9fd211",
      "parents": [
        "862150e12779792900343b48a1223beb5e2b62f7"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jul 01 15:28:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 15:28:23 2026"
      },
      "message": "Bump actions/checkout from 6.0.2 to 7.0.0 in the actions group\n\nBumps the actions group with 1 update: [actions/checkout](https://github.com/actions/checkout).\n\n\nUpdates `actions/checkout` from 6.0.2 to 7.0.0\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/de0fac2e4500dabe0009e67214ff5f5447ce83dd...9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0)\n\n---\nupdated-dependencies:\n- dependency-name: actions/checkout\n  dependency-version: 7.0.0\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n  dependency-group: actions\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "862150e12779792900343b48a1223beb5e2b62f7",
      "tree": "9cf67b793f55f8809faf8feb1321bd5f6589ce85",
      "parents": [
        "1a5bf80f2fa40454589e6144efe5f72015ef9d24",
        "f39ea903ba49eb5a0b2c6723c9a929b41ed4a0f1"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Jun 02 14:38:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 14:38:20 2026"
      },
      "message": "Merge pull request #254 from kjd/release-3.18\n\nRelease 3.18"
    },
    {
      "commit": "f39ea903ba49eb5a0b2c6723c9a929b41ed4a0f1",
      "tree": "9cf67b793f55f8809faf8feb1321bd5f6589ce85",
      "parents": [
        "40f4e407bc7452da37c24b0c112dcda9a5b299ba"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Jun 02 14:31:25 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Jun 02 14:31:25 2026"
      },
      "message": "Release 3.18\n"
    },
    {
      "commit": "40f4e407bc7452da37c24b0c112dcda9a5b299ba",
      "tree": "48200c1e660318fafe063747737515e2ac40beed",
      "parents": [
        "1a5bf80f2fa40454589e6144efe5f72015ef9d24"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Jun 02 02:54:52 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Jun 02 02:54:52 2026"
      },
      "message": "Pre-release 3.18rc0\n"
    },
    {
      "commit": "1a5bf80f2fa40454589e6144efe5f72015ef9d24",
      "tree": "0bcce953e66a544e84044a62a61ddd2393067b5a",
      "parents": [
        "0b1758ba11952a2e88fd6141ffa620409bff0580",
        "5bbb26fc86e28c4ee1434ae8ae8db76de4c2a5ac"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Jun 02 02:24:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 02:24:15 2026"
      },
      "message": "Merge pull request #253 from kjd/lenient-decode\n\nAdd a lenient decode mode for display applications"
    },
    {
      "commit": "5bbb26fc86e28c4ee1434ae8ae8db76de4c2a5ac",
      "tree": "0bcce953e66a544e84044a62a61ddd2393067b5a",
      "parents": [
        "c532bae5270489cef8faf9f6b1eb70cbcb454c6d",
        "0b1758ba11952a2e88fd6141ffa620409bff0580"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Jun 02 02:19:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 02:19:32 2026"
      },
      "message": "Merge branch \u0027master\u0027 into lenient-decode"
    },
    {
      "commit": "c532bae5270489cef8faf9f6b1eb70cbcb454c6d",
      "tree": "0a6a565b2a1c021be6f5de982a0e4d6b9245ffa7",
      "parents": [
        "47b5cde6fffd1a33c4a600228152c919c6de0eb4"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Jun 02 02:15:13 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Jun 02 02:15:13 2026"
      },
      "message": "Rename decode() lenient\u003d option to display\u003d (issue #248)\n"
    },
    {
      "commit": "0b1758ba11952a2e88fd6141ffa620409bff0580",
      "tree": "03532b7dfdc4960eb717ac422016328c8801140f",
      "parents": [
        "22ebb73b164081f209449b50162eb7ce086e96a4",
        "f48619c4cea6859b938d560fdd9feb898e678567"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 28 15:12:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 15:12:35 2026"
      },
      "message": "Merge pull request #252 from kjd/release-3.17\n\nRelease 3.17"
    },
    {
      "commit": "f48619c4cea6859b938d560fdd9feb898e678567",
      "tree": "03532b7dfdc4960eb717ac422016328c8801140f",
      "parents": [
        "7421ba8003227f816142ab40178e3a7d204e6847"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 28 14:30:10 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 28 14:30:10 2026"
      },
      "message": "Release 3.17\n"
    }
  ],
  "next": "7421ba8003227f816142ab40178e3a7d204e6847"
}
