)]}'
{
  "log": [
    {
      "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"
    },
    {
      "commit": "7421ba8003227f816142ab40178e3a7d204e6847",
      "tree": "935f466c7b1f051fcba3a2f51a1a67ee81257434",
      "parents": [
        "22ebb73b164081f209449b50162eb7ce086e96a4"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 28 14:24:38 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 28 14:24:38 2026"
      },
      "message": "Pre-release 3.17rc0\n"
    },
    {
      "commit": "22ebb73b164081f209449b50162eb7ce086e96a4",
      "tree": "79306998e5c5f0e519c2900d55d9c3a17f059f02",
      "parents": [
        "f90b87adc6b6b2a591dfc7fb3f8e47870dc81722",
        "2a7ac0a58c788d50112a5003af545a83807fb108"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 28 14:08:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 14:08:12 2026"
      },
      "message": "Merge pull request #251 from kjd/structure-optimizations\n\nStructure optimizations"
    },
    {
      "commit": "2a7ac0a58c788d50112a5003af545a83807fb108",
      "tree": "79306998e5c5f0e519c2900d55d9c3a17f059f02",
      "parents": [
        "354eee9850a7b2962b65ae02010f7ebd9c99b7ed"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 28 14:04:03 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 28 14:04:03 2026"
      },
      "message": "Drop redundant parallel-arrays comment from uts46data\n"
    },
    {
      "commit": "354eee9850a7b2962b65ae02010f7ebd9c99b7ed",
      "tree": "88b412524e86142d24fb8100270a576ea0e51655",
      "parents": [
        "8c34ffcab603b4a7a727d4e286b1f3342813281d"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 28 02:44:23 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 28 13:59:15 2026"
      },
      "message": "Apply ruff format to uts46data.py\n"
    },
    {
      "commit": "8c34ffcab603b4a7a727d4e286b1f3342813281d",
      "tree": "e16a8635ac5367d000f0165228ac4e002383332a",
      "parents": [
        "1189629e8a319f7c2b4678b5716c180ebd97de03"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 28 02:35:54 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 28 13:59:15 2026"
      },
      "message": "Refactor uts46data into parallel arrays\n\nUse a more memory efficient approach of three parallel arrays indexed by\nrow number:\n\n  - uts46_starts: array.array(\u0027I\u0027) of codepoint starts (4 bytes each),\n    still sorted so bisect.bisect_right gives the matching row.\n  - uts46_statuses: bytes, one byte per row (V/M/D/I/X/3).\n  - uts46_replacements: tuple[Optional[str], ...], None where no\n    mapping applies.\n\nResident memory drops from ~1mb to ~350kb.\n"
    },
    {
      "commit": "1189629e8a319f7c2b4678b5716c180ebd97de03",
      "tree": "713b73e0a1e2d72a58b8764dad18b4963d64e902",
      "parents": [
        "f90b87adc6b6b2a591dfc7fb3f8e47870dc81722"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 28 02:15:53 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 28 13:57:32 2026"
      },
      "message": "Range-encode joining_types for compact representation\n\nRefactor joining_types to reduce memory usage (~232kb to ~22kb), and\nmore efficient lookups by avoiding dicts.\n"
    },
    {
      "commit": "47b5cde6fffd1a33c4a600228152c919c6de0eb4",
      "tree": "7c6809dc1a8230dcef8419c906e4e2c6612fe7ca",
      "parents": [
        "d6ffd28be164dfbd3ebca8b3396e39d191f4909b"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon May 25 23:00:18 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed May 27 19:06:33 2026"
      },
      "message": "Add lenient option to decode() for best-effort label recovery (issue #248)\n\nWhen lenient\u003dTrue, any xn-- label that fails to decode is returned\nunchanged rather than aborting the whole domain. This matches the\nper-label recovery prescribed by UTS #46 and WHATWG URL for\n\"decode for display\" use cases.\n"
    },
    {
      "commit": "f90b87adc6b6b2a591dfc7fb3f8e47870dc81722",
      "tree": "e80ba4b1d3bd5dff650fed5a7dd9043c1bd51078",
      "parents": [
        "d6ffd28be164dfbd3ebca8b3396e39d191f4909b"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Fri May 22 14:12:19 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Fri May 22 14:12:19 2026"
      },
      "message": "Generic length limit for functions\n\nAdd a belt-and-suspender general length limit. 1024 is a value that\nis roughly an order of magnitude higher than expected inputs and\nshouldn\u0027t get caught up trapping legitimate inputs.\n"
    },
    {
      "commit": "d6ffd28be164dfbd3ebca8b3396e39d191f4909b",
      "tree": "a8a64efe51d7f372aff27cad8b2e4b8d140550a9",
      "parents": [
        "d4bc9e742b753cff2ec6c53bd4be730863ca9c53",
        "6d1a0de52a8b4690f1b2a89829aa85ff1de3635a"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Fri May 22 00:18:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 00:18:08 2026"
      },
      "message": "Merge pull request #247 from kjd/release-3.16\n\nRelease 3.16"
    },
    {
      "commit": "6d1a0de52a8b4690f1b2a89829aa85ff1de3635a",
      "tree": "a8a64efe51d7f372aff27cad8b2e4b8d140550a9",
      "parents": [
        "4e6cbe225a3e0b6e7eed2082086a12cba526e787"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Fri May 22 00:14:16 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Fri May 22 00:14:16 2026"
      },
      "message": "Release 3.16\n"
    },
    {
      "commit": "4e6cbe225a3e0b6e7eed2082086a12cba526e787",
      "tree": "55613139132b407257e1f71ba9a7a3505c8672db",
      "parents": [
        "223533c34c9e23470e714ed9b1f1c41867177732"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 23:46:19 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 23:46:19 2026"
      },
      "message": "Demote installation instruction to usage section\n"
    },
    {
      "commit": "223533c34c9e23470e714ed9b1f1c41867177732",
      "tree": "3cee66d1b3ecbb6ceafc78f981d8d4455968910d",
      "parents": [
        "b1640b228a50b3c94ffcf8a664eb6cb186550f3e",
        "7f3b15e8839f0e404a00054c4072e69347e727f2"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 23:42:52 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 23:42:52 2026"
      },
      "message": "Merge branch \u0027readme-simplification\u0027 into release-3.16\n"
    },
    {
      "commit": "b1640b228a50b3c94ffcf8a664eb6cb186550f3e",
      "tree": "b35d039a65b581b61d8ec06a7e49b2171e0cd68e",
      "parents": [
        "3a861132be61091454aae10c292d98bcfd3cd797"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 23:37:13 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 23:37:13 2026"
      },
      "message": "Bump version to 3.16rc0\n"
    },
    {
      "commit": "3a861132be61091454aae10c292d98bcfd3cd797",
      "tree": "da003166d47fec06d61d76d481f26f3476ca9d51",
      "parents": [
        "d4bc9e742b753cff2ec6c53bd4be730863ca9c53"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 23:35:58 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 23:35:58 2026"
      },
      "message": "Update history for 3.16 release\n"
    },
    {
      "commit": "d4bc9e742b753cff2ec6c53bd4be730863ca9c53",
      "tree": "2674b311cc2bcab8ed18195a70b5be523fa06343",
      "parents": [
        "51f4555582c2d27718e5f0540a4380571aa5a1c0",
        "a21d9fca6b04c47ddbd0303d62bbc0712b55f43d"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 23:21:30 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 23:21:30 2026"
      },
      "message": "Merge pull request #246 from kjd/python-3.9\n\nUpdate version support to Python 3.9+"
    },
    {
      "commit": "a21d9fca6b04c47ddbd0303d62bbc0712b55f43d",
      "tree": "2674b311cc2bcab8ed18195a70b5be523fa06343",
      "parents": [
        "b46492694aa21dc1c3608f59dd5b9620c08b2d0f"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 23:18:09 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 23:18:09 2026"
      },
      "message": "Update deprecation policy\n"
    },
    {
      "commit": "b46492694aa21dc1c3608f59dd5b9620c08b2d0f",
      "tree": "5366a126c577a2b0e9d48ec1f34ce7112239dafd",
      "parents": [
        "51f4555582c2d27718e5f0540a4380571aa5a1c0"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 23:11:47 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 23:14:35 2026"
      },
      "message": "Raise minimum Python to 3.9 and modernize typing\n"
    },
    {
      "commit": "7f3b15e8839f0e404a00054c4072e69347e727f2",
      "tree": "d4becf33cb3f86174c6fc57f5dd04e766b3582af",
      "parents": [
        "7530c7020ae2bcf0acff1fafd71fb047a3b117ed"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 19:47:58 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 19:47:58 2026"
      },
      "message": "Explicit example not needed\n"
    },
    {
      "commit": "7530c7020ae2bcf0acff1fafd71fb047a3b117ed",
      "tree": "976b63fd2d25f754dc1dfe860ba4d280b7ac27c2",
      "parents": [
        "7aa2ae857244e98e923dcd7adb2e937432b918e1"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 19:46:30 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 19:46:30 2026"
      },
      "message": "Remove unnecessary print()\n"
    },
    {
      "commit": "7aa2ae857244e98e923dcd7adb2e937432b918e1",
      "tree": "2a5d63f66511dc0515d6cfaafef8c4e63d11ba2e",
      "parents": [
        "51f4555582c2d27718e5f0540a4380571aa5a1c0"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 19:38:05 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 19:38:05 2026"
      },
      "message": "Simplify README and split idna-data docs into tools/README.md\n"
    },
    {
      "commit": "51f4555582c2d27718e5f0540a4380571aa5a1c0",
      "tree": "ac1b38bb83aa33cff25a7e1a9ef9e6e46bdc34b7",
      "parents": [
        "a1d0a0fe3167a1a844ceb80303a3b932873039e9",
        "641e13dec1611500955e684977c4035f7bf6937f"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 19:13:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 19:13:52 2026"
      },
      "message": "Merge pull request #245 from kjd/ruff-lint-refinements\n\nRuff lint refinements"
    },
    {
      "commit": "641e13dec1611500955e684977c4035f7bf6937f",
      "tree": "ac1b38bb83aa33cff25a7e1a9ef9e6e46bdc34b7",
      "parents": [
        "78dfa437f4331f0ad8e496be731d2125a6f7b640"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 19:03:24 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 19:03:24 2026"
      },
      "message": "Apply PLR1714 and TRY300 refinements in alabel/valid_contexto\n"
    },
    {
      "commit": "78dfa437f4331f0ad8e496be731d2125a6f7b640",
      "tree": "07db30ee94929838215f8674ec86dcc418860c3e",
      "parents": [
        "a1d0a0fe3167a1a844ceb80303a3b932873039e9"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 18:29:36 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 18:29:36 2026"
      },
      "message": "Extend ruff lint config and apply auto-fixes\n"
    },
    {
      "commit": "a1d0a0fe3167a1a844ceb80303a3b932873039e9",
      "tree": "5a5f21ad4d1220910be741436c2cc8cd0ccd42cf",
      "parents": [
        "7bc9e4afd9350166c5cf34f24844b958ebe4d666"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 18:10:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 18:10:39 2026"
      },
      "message": "Test Python 3.15 beta and update PyPy test to 3.11 (#244)\n\n* Add Python 3.15 to CI matrix\n* Update PyPy test target to 3.11"
    },
    {
      "commit": "7bc9e4afd9350166c5cf34f24844b958ebe4d666",
      "tree": "a7091a30cf14acde3566dc0887641652778ea67f",
      "parents": [
        "ca9c91b56b26cdd85acc6072b15db557ab82ce5f"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Thu May 21 17:55:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 17:55:50 2026"
      },
      "message": "Add a command-line interface (#242)\n\n* Add command-line interface for encoding and decoding domains\n* Accept multiple domains and read from stdin in the CLI"
    },
    {
      "commit": "ca9c91b56b26cdd85acc6072b15db557ab82ce5f",
      "tree": "ea0b50089c282d59d6d09ec858d60f1fd1a18f76",
      "parents": [
        "4329802d9c1f91988072d11fb1c5bd6ded0a625f",
        "0e8ae3027a637457a5b2604124b0566c2e224d94"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed May 20 15:43:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 15:43:41 2026"
      },
      "message": "Merge pull request #239 from kjd/pin-ci-dependencies-by-hash\n\nPin CI Python dependencies by hash"
    },
    {
      "commit": "0e8ae3027a637457a5b2604124b0566c2e224d94",
      "tree": "ea0b50089c282d59d6d09ec858d60f1fd1a18f76",
      "parents": [
        "4329802d9c1f91988072d11fb1c5bd6ded0a625f"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun May 17 17:55:50 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun May 17 17:55:50 2026"
      },
      "message": "Pin CI Python dependencies by hash\n"
    },
    {
      "commit": "4329802d9c1f91988072d11fb1c5bd6ded0a625f",
      "tree": "2f2d3a498240baeb4770c012a5466ac8f2c7da85",
      "parents": [
        "05d4b219aa9eddc47371fcbd2000f0301016f3e9",
        "d2473f49eb3d1fae67c52b272321e6903528d7d4"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 22:46:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 22:46:55 2026"
      },
      "message": "Merge pull request #238 from kjd/release-3.15\n\nRelease 3.15"
    },
    {
      "commit": "d2473f49eb3d1fae67c52b272321e6903528d7d4",
      "tree": "2f2d3a498240baeb4770c012a5466ac8f2c7da85",
      "parents": [
        "30314d4628744ca14cf2b5820564e5127a9f86f2"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 22:40:29 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 22:42:51 2026"
      },
      "message": "Release 3.15\n"
    },
    {
      "commit": "30314d4628744ca14cf2b5820564e5127a9f86f2",
      "tree": "36b9ceaff2042dad392c60ee7cc81e62855daa69",
      "parents": [
        "05d4b219aa9eddc47371fcbd2000f0301016f3e9"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 22:31:21 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 22:31:21 2026"
      },
      "message": "Pre-release 3.15rc0\n"
    },
    {
      "commit": "05d4b219aa9eddc47371fcbd2000f0301016f3e9",
      "tree": "6501c8f9f355d73d33cfef03500aacc7ddda97ce",
      "parents": [
        "59fa8002d514bf4a5ce7b58f67b9ec587d53fa9c",
        "2987fdba1962bbb2358399e0084ba062b98a0bee"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 22:21:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 22:21:10 2026"
      },
      "message": "Merge pull request #237 from kjd/convert-docs-to-markdown\n\nConvert README and HISTORY from reStructuredText to Markdown"
    },
    {
      "commit": "2987fdba1962bbb2358399e0084ba062b98a0bee",
      "tree": "6501c8f9f355d73d33cfef03500aacc7ddda97ce",
      "parents": [
        "59fa8002d514bf4a5ce7b58f67b9ec587d53fa9c"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 22:19:00 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 22:19:00 2026"
      },
      "message": "Convert README and HISTORY from reStructuredText to Markdown\n"
    },
    {
      "commit": "59fa8002d514bf4a5ce7b58f67b9ec587d53fa9c",
      "tree": "dda160fa4a4b328270f6ddf2d5073621019d52a2",
      "parents": [
        "bbd8004a797185d8c56bb555cd5c88fde05e0631",
        "def69834ced5d4b3c50439d8b99c4c856ec19ca2"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 22:07:04 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 22:07:04 2026"
      },
      "message": "Merge pull request #236 from kjd/dependabot/github_actions/actions-f3e34333ea\n\nBump github/codeql-action from 3.35.2 to 4.35.2 in the actions group"
    },
    {
      "commit": "def69834ced5d4b3c50439d8b99c4c856ec19ca2",
      "tree": "dda160fa4a4b328270f6ddf2d5073621019d52a2",
      "parents": [
        "edd07c05024344a6ccb517414ccb36683aee99fc",
        "bbd8004a797185d8c56bb555cd5c88fde05e0631"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 22:03:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 22:03:58 2026"
      },
      "message": "Merge branch \u0027master\u0027 into dependabot/github_actions/actions-f3e34333ea"
    },
    {
      "commit": "bbd8004a797185d8c56bb555cd5c88fde05e0631",
      "tree": "d2a3ecb6968edde29e15ab2a9946572fe9f40efa",
      "parents": [
        "f11746cf4981d25123ef7830d3ee60f07de8ae3d",
        "5557db030c11bdec50d62aa5f631d705d33ba123"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 22:03:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 22:03:15 2026"
      },
      "message": "Merge pull request #234 from StanFromIreland/patch-1\n\nUpdate GHSA to CVE number"
    },
    {
      "commit": "edd07c05024344a6ccb517414ccb36683aee99fc",
      "tree": "ba9b45e723183cb0c9f5b4522d08e94aa4a65397",
      "parents": [
        "f11746cf4981d25123ef7830d3ee60f07de8ae3d"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue May 12 22:00:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 22:00:29 2026"
      },
      "message": "Bump github/codeql-action from 3.35.2 to 4.35.2 in the actions group\n\nBumps the actions group with 1 update: [github/codeql-action](https://github.com/github/codeql-action).\n\n\nUpdates `github/codeql-action` from 3.35.2 to 4.35.2\n- [Release notes](https://github.com/github/codeql-action/releases)\n- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/github/codeql-action/compare/ce64ddcb0d8d890d2df4a9d1c04ff297367dea2a...95e58e9a2cdfd71adc6e0353d5c52f41a045d225)\n\n---\nupdated-dependencies:\n- dependency-name: github/codeql-action\n  dependency-version: 4.35.2\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": "5557db030c11bdec50d62aa5f631d705d33ba123",
      "tree": "d2a3ecb6968edde29e15ab2a9946572fe9f40efa",
      "parents": [
        "8edf4cb58a8825474b5acda7a7de2171ff4e7cf3",
        "f11746cf4981d25123ef7830d3ee60f07de8ae3d"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 21:59:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 21:59:10 2026"
      },
      "message": "Merge branch \u0027master\u0027 into patch-1"
    },
    {
      "commit": "f11746cf4981d25123ef7830d3ee60f07de8ae3d",
      "tree": "410919eb45640df906d5f1af75b7e43a165719b1",
      "parents": [
        "9caafb00212454cf5fd81d60979032ab819e7516",
        "4a00488d61a4541a514dff2fb19568400d3a4074"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 21:58:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 21:58:06 2026"
      },
      "message": "Merge pull request #235 from StanFromIreland/patch-2\n\nAdd Dependabot configuration for GitHub Actions"
    },
    {
      "commit": "4a00488d61a4541a514dff2fb19568400d3a4074",
      "tree": "410919eb45640df906d5f1af75b7e43a165719b1",
      "parents": [
        "9caafb00212454cf5fd81d60979032ab819e7516"
      ],
      "author": {
        "name": "Stan Ulbrych",
        "email": "stan@python.org",
        "time": "Tue May 12 20:00:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 20:00:13 2026"
      },
      "message": "Add Dependabot configuration for GitHub Actions"
    },
    {
      "commit": "8edf4cb58a8825474b5acda7a7de2171ff4e7cf3",
      "tree": "003ade6ba2ee52bc88b66f7e597f9b811f63d848",
      "parents": [
        "9caafb00212454cf5fd81d60979032ab819e7516"
      ],
      "author": {
        "name": "Stan Ulbrych",
        "email": "stan@python.org",
        "time": "Tue May 12 19:59:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 19:59:03 2026"
      },
      "message": "Update GHSA to CVE number"
    },
    {
      "commit": "9caafb00212454cf5fd81d60979032ab819e7516",
      "tree": "97cbd33b16da88602db6d1686be19dbab04230bb",
      "parents": [
        "fefc9947f9a2b803fa04b53253f368c19ddd4cd1",
        "5ce96abafe9eaf3bf79add4972139354e5d66d7e"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 03:52:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 03:52:48 2026"
      },
      "message": "Merge pull request #233 from kjd/cleanups\n\nCleanups"
    },
    {
      "commit": "5ce96abafe9eaf3bf79add4972139354e5d66d7e",
      "tree": "97cbd33b16da88602db6d1686be19dbab04230bb",
      "parents": [
        "6e9829192626814399c05bd0024526557bbe0098",
        "fefc9947f9a2b803fa04b53253f368c19ddd4cd1"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 03:50:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 03:50:47 2026"
      },
      "message": "Merge branch \u0027master\u0027 into cleanups"
    },
    {
      "commit": "6e9829192626814399c05bd0024526557bbe0098",
      "tree": "97cbd33b16da88602db6d1686be19dbab04230bb",
      "parents": [
        "9d86ba6448fe54536fd1aaf093b493d69b6a3914"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 02:34:24 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 02:34:24 2026"
      },
      "message": "Pin lint CI to a single Python version (3.14)\n"
    },
    {
      "commit": "9d86ba6448fe54536fd1aaf093b493d69b6a3914",
      "tree": "2bd4b06e8840c81a73279814858d111e751a9c91",
      "parents": [
        "ab7d46cbfd1e997fd82cfe05b44713eee009c583"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 02:34:15 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 02:34:15 2026"
      },
      "message": "Expand ruff lint set and apply surfaced fixes\n"
    },
    {
      "commit": "ab7d46cbfd1e997fd82cfe05b44713eee009c583",
      "tree": "b4d9cee0eb12868e9a3873bdfe6155035029f378",
      "parents": [
        "c18b8049447caa0a95957eddf610af27e74749a5"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 02:21:36 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 02:21:36 2026"
      },
      "message": "Tidy core helpers: hoist bidi sets, simplify length checks, dedupe codec regex\n"
    },
    {
      "commit": "fefc9947f9a2b803fa04b53253f368c19ddd4cd1",
      "tree": "8c0555c0abfe4807219df1525c953cef6cc24f50",
      "parents": [
        "a95f1f04d46d70d3eb146ef07d498010a27c5714",
        "c18b8049447caa0a95957eddf610af27e74749a5"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 00:51:00 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 00:51:00 2026"
      },
      "message": "Merge pull request #232 from kjd/tidy\n\nStreamline commentary"
    },
    {
      "commit": "c18b8049447caa0a95957eddf610af27e74749a5",
      "tree": "8c0555c0abfe4807219df1525c953cef6cc24f50",
      "parents": [
        "a95f1f04d46d70d3eb146ef07d498010a27c5714"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 00:48:54 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 00:48:54 2026"
      },
      "message": "Streamline commentary\n"
    },
    {
      "commit": "a95f1f04d46d70d3eb146ef07d498010a27c5714",
      "tree": "9a491487933892723494ae8cac834e29ae023720",
      "parents": [
        "420aebc7e8dd35d929a035e7869f7ffd8288d3d0",
        "1ffa8d6ce702a68f672a8f057687d6335abbecb7"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 00:34:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 00:34:31 2026"
      },
      "message": "Merge pull request #229 from felixonmars/patch-1\n\nAllow flit_core 4.x"
    },
    {
      "commit": "1ffa8d6ce702a68f672a8f057687d6335abbecb7",
      "tree": "9a491487933892723494ae8cac834e29ae023720",
      "parents": [
        "81148428184130d65a78ef902a81d0da160cff82",
        "420aebc7e8dd35d929a035e7869f7ffd8288d3d0"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 00:33:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 00:33:03 2026"
      },
      "message": "Merge branch \u0027master\u0027 into patch-1"
    },
    {
      "commit": "420aebc7e8dd35d929a035e7869f7ffd8288d3d0",
      "tree": "c0062b8ca51245599be9f062e7ffef45d2a7c597",
      "parents": [
        "b33b5cb6ca2c8b8dfd7a86043756f7be00bf762b",
        "e1cb465b6376f33306a26f467d197edbcd01c4b9"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 12 00:30:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 12 00:30:03 2026"
      },
      "message": "Merge pull request #230 from metsw24-max/check-label-length-cap\n\nAdd early length validation in check_label"
    },
    {
      "commit": "e1cb465b6376f33306a26f467d197edbcd01c4b9",
      "tree": "c0062b8ca51245599be9f062e7ffef45d2a7c597",
      "parents": [
        "b33b5cb6ca2c8b8dfd7a86043756f7be00bf762b"
      ],
      "author": {
        "name": "metsw24-max",
        "email": "metsw24@gmail.com",
        "time": "Mon May 11 15:29:30 2026"
      },
      "committer": {
        "name": "metsw24-max",
        "email": "metsw24@gmail.com",
        "time": "Mon May 11 15:29:30 2026"
      },
      "message": "Enforce early length limits in check_label\n"
    },
    {
      "commit": "81148428184130d65a78ef902a81d0da160cff82",
      "tree": "7dc49600e53ae8ac96488f1027abde48d95fbeca",
      "parents": [
        "b33b5cb6ca2c8b8dfd7a86043756f7be00bf762b"
      ],
      "author": {
        "name": "Felix Yan",
        "email": "felixonmars@archlinux.org",
        "time": "Mon May 11 14:59:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 11 14:59:09 2026"
      },
      "message": "Allow flit_core 4.x\n\nVerified to build successfully here with flit_core 4.0.0"
    },
    {
      "commit": "b33b5cb6ca2c8b8dfd7a86043756f7be00bf762b",
      "tree": "89657a35e7197dec071e67dcbd5e38cd96d2ce32",
      "parents": [
        "ab5668fb6eaf4254d91d6993c0b23e98e21202fb",
        "37b6b7497aee4805f7a74a7d86206ac05be9669a"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun May 10 20:44:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 10 20:44:24 2026"
      },
      "message": "Merge pull request #228 from kjd/release-3.14\n\nRelease 3.14"
    },
    {
      "commit": "37b6b7497aee4805f7a74a7d86206ac05be9669a",
      "tree": "89657a35e7197dec071e67dcbd5e38cd96d2ce32",
      "parents": [
        "628fef84d3eda59321c21127e73dcd873db23ead"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun May 10 20:29:59 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun May 10 20:29:59 2026"
      },
      "message": "Release v3.14\n"
    },
    {
      "commit": "628fef84d3eda59321c21127e73dcd873db23ead",
      "tree": "57aa2ac60f3fa0bd4e5927408dcb3be5441a2b19",
      "parents": [
        "1e26c7fd93c67995422af9d1f071f45ee6433fd0"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun May 10 19:44:47 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun May 10 20:04:22 2026"
      },
      "message": "Use valid_string_length() for early oversized-input check\n"
    },
    {
      "commit": "1e26c7fd93c67995422af9d1f071f45ee6433fd0",
      "tree": "67962636500480b4e02d6f373df9fc862cdc9081",
      "parents": [
        "ab5668fb6eaf4254d91d6993c0b23e98e21202fb"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun May 10 16:46:41 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun May 10 16:46:41 2026"
      },
      "message": "Tweak release wording\n"
    },
    {
      "commit": "ab5668fb6eaf4254d91d6993c0b23e98e21202fb",
      "tree": "f829880a9763120545235c12fda363b86b48175e",
      "parents": [
        "c0dda4501df5d91c3181ce6f962dc5de74e82cc1"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun May 10 16:08:30 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun May 10 16:08:30 2026"
      },
      "message": "Pre-release 3.14\n"
    },
    {
      "commit": "c0dda4501df5d91c3181ce6f962dc5de74e82cc1",
      "tree": "a0d9135f8ec5b9de4bf1950544c542f38d7d8163",
      "parents": [
        "b7391f4c240bf2eae80eaed0a2ef7c2e0496af96"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Sun May 10 15:47:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun May 10 15:47:22 2026"
      },
      "message": "Merge commit from fork"
    },
    {
      "commit": "b7391f4c240bf2eae80eaed0a2ef7c2e0496af96",
      "tree": "9ea124a7a37df26d50da75d0559c52a3cfbc9c74",
      "parents": [
        "0f4a28d88f8cce54269f0b6a42edf5e6a5424319"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue May 05 23:00:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 05 23:00:05 2026"
      },
      "message": "Add docstrings to package (#226)\n\nAdd reST docstrings to public API in core, compat, and codec"
    },
    {
      "commit": "0f4a28d88f8cce54269f0b6a42edf5e6a5424319",
      "tree": "50ae3236b7a50151c90b8145b098acd973450c5b",
      "parents": [
        "7e6df7196e6396b5b84b9530eab8272b5ad51898"
      ],
      "author": {
        "name": "Nadav",
        "email": "18245584+Nadav0077@users.noreply.github.com",
        "time": "Tue May 05 22:45:19 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 05 22:45:19 2026"
      },
      "message": "Raise IDNAError on non-string input to encode/decode (#224)"
    },
    {
      "commit": "7e6df7196e6396b5b84b9530eab8272b5ad51898",
      "tree": "a7797a6066b0240521f095f4cbf827266c4a3008",
      "parents": [
        "6ebfaab9ea718dce38a7c17ddafd7fb28b0468d4"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Fri May 01 23:25:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 01 23:25:13 2026"
      },
      "message": "Address type issues found by `ty` (#225)"
    },
    {
      "commit": "6ebfaab9ea718dce38a7c17ddafd7fb28b0468d4",
      "tree": "a5e6e712ee30c70607b1d34906ce970147aa1aa6",
      "parents": [
        "5f20d1e41eea3b3873d18d83d7a384784f72a92e",
        "89cdfd27338896cee6b1ee18e64c96ac28684ce0"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Apr 22 16:43:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 22 16:43:59 2026"
      },
      "message": "Merge pull request #221 from kjd/release-3.13\n\nRelease 3.13"
    },
    {
      "commit": "89cdfd27338896cee6b1ee18e64c96ac28684ce0",
      "tree": "a5e6e712ee30c70607b1d34906ce970147aa1aa6",
      "parents": [
        "1eb068687543118147417a8d8a70674e2c172891"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Apr 22 16:39:15 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Apr 22 16:39:15 2026"
      },
      "message": "Release v3.13\n"
    },
    {
      "commit": "1eb068687543118147417a8d8a70674e2c172891",
      "tree": "436ad9adda319b0e3aabe412a8d07a0e03bd9d32",
      "parents": [
        "5f20d1e41eea3b3873d18d83d7a384784f72a92e"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Apr 22 16:36:21 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Apr 22 16:36:21 2026"
      },
      "message": "Pre-release 3.13\n"
    },
    {
      "commit": "5f20d1e41eea3b3873d18d83d7a384784f72a92e",
      "tree": "efb2306e6ff5c6eaca7b207bf950c7211e5a6523",
      "parents": [
        "a5304a4cdbd7b31595f8ac42ffdfa88f5b936467",
        "4ea84252ab21e62a79e5a3273746112b5dcfb810"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Apr 22 03:01:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 22 03:01:14 2026"
      },
      "message": "Merge pull request #220 from kjd/unicode-next\n\nRemove unicodedata dependency from idna-data tool"
    },
    {
      "commit": "4ea84252ab21e62a79e5a3273746112b5dcfb810",
      "tree": "efb2306e6ff5c6eaca7b207bf950c7211e5a6523",
      "parents": [
        "fd47341a08bbdcffda33694211ca4de10170cd41"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Apr 22 02:29:29 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Apr 22 02:29:29 2026"
      },
      "message": "Regenerate idnadata.py with correct NFKC_CF data\n\nU+A7F1 (MODIFIER LETTER CAPITAL S) is now correctly classified as\nDISALLOWED rather than PVALID, as its NFKC_CF mapping makes it\nunstable. Previously misclassified because the system Python had\nolder Unicode data that didn\u0027t include this codepoint.\n"
    },
    {
      "commit": "fd47341a08bbdcffda33694211ca4de10170cd41",
      "tree": "ac9861caf8936ff4353c5c167afcb1df4d10fa03",
      "parents": [
        "a5304a4cdbd7b31595f8ac42ffdfa88f5b936467"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Apr 22 02:27:20 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Wed Apr 22 02:27:20 2026"
      },
      "message": "Use NFKC_CF from Unicode data files instead of Python\u0027s unicodedata module\n\nReplaces the dependency on unicodedata.normalize() and\nunicodedata.unidata_version with the pre-computed NFKC_Casefold\nproperty from DerivedNormalizationProps.txt, ensuring the tool always\nuses data matching the requested Unicode version rather than whatever\nversion is bundled with the Python runtime.\n"
    },
    {
      "commit": "a5304a4cdbd7b31595f8ac42ffdfa88f5b936467",
      "tree": "93ed965a5faf09d45d4733b9427980561a719bb5",
      "parents": [
        "1bb44ddb3f2a9dcf97a6ac11aba34e5b6ed31291",
        "d80d6f9254d699961fa2c669a1534cde9d4ee5b6"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 13:33:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 13:33:53 2026"
      },
      "message": "Merge pull request #219 from kjd/release-3.12\n\nRelease v3.12"
    },
    {
      "commit": "d80d6f9254d699961fa2c669a1534cde9d4ee5b6",
      "tree": "93ed965a5faf09d45d4733b9427980561a719bb5",
      "parents": [
        "1bb44ddb3f2a9dcf97a6ac11aba34e5b6ed31291"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 13:27:02 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 13:27:02 2026"
      },
      "message": "Release v3.12\n"
    },
    {
      "commit": "1bb44ddb3f2a9dcf97a6ac11aba34e5b6ed31291",
      "tree": "c01a87fff75dbff376d5da9839e619ffabbdd4e4",
      "parents": [
        "c5459a10370f005dc09921aee3201b5a45699f9d",
        "909c49d15b8d159be163bccc7972116baffdb47b"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 03:33:51 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 03:33:51 2026"
      },
      "message": "Merge pull request #218 from kjd/release-candidate-3.12rc0\n\nRelease candidate for 3.12"
    },
    {
      "commit": "909c49d15b8d159be163bccc7972116baffdb47b",
      "tree": "c01a87fff75dbff376d5da9839e619ffabbdd4e4",
      "parents": [
        "c5459a10370f005dc09921aee3201b5a45699f9d"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 03:31:29 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 03:31:29 2026"
      },
      "message": "Release candidate for 3.12\n"
    },
    {
      "commit": "c5459a10370f005dc09921aee3201b5a45699f9d",
      "tree": "5a037c31e8f08d64eb7f2664847f60ce28771d13",
      "parents": [
        "a5fcbef4777af97787178f199ec380677c20c96b",
        "f1ab8f60af0c83491eeef78a13347f4fe6014c9c"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 03:15:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 03:15:38 2026"
      },
      "message": "Merge pull request #217 from kjd/housekeeping-2\n\nHousekeeping and transitional deprecation warning"
    },
    {
      "commit": "f1ab8f60af0c83491eeef78a13347f4fe6014c9c",
      "tree": "5a037c31e8f08d64eb7f2664847f60ce28771d13",
      "parents": [
        "94bcdc38fd75ae8a259132f7e3f5f1fb5373c717"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 03:12:03 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 03:12:03 2026"
      },
      "message": "Add tests for transitional deprecation warning\n\nAdd tests to verify the deprecation warning is emitted when\ntransitional\u003dTrue is passed to encode(), and that no warning\nis emitted with the default. Remove the duplicate warning from\nuts46_remap() to avoid warning twice when called via encode().\n"
    },
    {
      "commit": "94bcdc38fd75ae8a259132f7e3f5f1fb5373c717",
      "tree": "60cb391c03ab9f0da3ab1e973bddbbd3347a2e3a",
      "parents": [
        "199b7ca1932d48d8c74fa1bfc5d3574ab10ebed0"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 03:03:59 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 03:03:59 2026"
      },
      "message": "Add deprecation warning for transitional argument\n\nTransitional processing was removed from UTS #46 in Unicode 16.0.0,\nso the transitional argument no longer has any effect. Warn users who\nstill pass it so they can update their code before it is removed.\n"
    },
    {
      "commit": "199b7ca1932d48d8c74fa1bfc5d3574ab10ebed0",
      "tree": "1d0f29c1c67f47cb1103e132c9a956230e634e7f",
      "parents": [
        "a5fcbef4777af97787178f199ec380677c20c96b"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 02:50:58 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 02:50:58 2026"
      },
      "message": "Code quality and CI housekeeping\n\n- Remove dead Python 2 version guard in tools/idna-data\n- Add --test-dir option to make-libdata for separate test output\n- Rename SCRIPT_WHITELIST to CONTEXT_SCRIPTS\n- Replace raise/except IndexError control flow in uts46_remap\n- Rename CI job from mypy to lint\n- Use 3.14 instead of 3.14-dev in CI build matrix\n- Remove dead requirements.txt check from CI\n"
    },
    {
      "commit": "a5fcbef4777af97787178f199ec380677c20c96b",
      "tree": "6e2dc69ab305b5b8b0475e3ba9df833c8593ddb8",
      "parents": [
        "5c0453b1ba2e448d88025c10f60d0433b07f5f54",
        "80915cfd4070a9266dbc83dce7d99fccea6a17af"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 02:23:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 02:23:40 2026"
      },
      "message": "Merge pull request #216 from kjd/unicode-17-bis\n\nAdd Unicode 17 support"
    },
    {
      "commit": "80915cfd4070a9266dbc83dce7d99fccea6a17af",
      "tree": "6e2dc69ab305b5b8b0475e3ba9df833c8593ddb8",
      "parents": [
        "007bcb6836c18547892bb02f0a426f5cdea47106"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 02:16:04 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 02:16:04 2026"
      },
      "message": "Fix ruff format compliance in generated idnadata.py\n\nAdd missing blank line in idna-data generator so the output has two\nblank lines between the joining_types() function and the\ncodepoint_classes assignment, as required by PEP 8.\n"
    },
    {
      "commit": "007bcb6836c18547892bb02f0a426f5cdea47106",
      "tree": "bc0488c96f755bd8a8b7af4f335d2caab7966d20",
      "parents": [
        "5c0453b1ba2e448d88025c10f60d0433b07f5f54"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 02:09:39 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 02:09:39 2026"
      },
      "message": "Update to Unicode 17.0.0\n\nUpdate IDNA data tables and UTS #46 mapping to Unicode 17.0.0.\nThe UTS #46 data URL scheme changed from Public/idna/{version} to\nPublic/{version}/idna. Skip five UTS #46 test vectors that exercise\ncodepoints (U+32931, U+32B9A) newly assigned in Unicode 17.0,\nwhich cause bidi lookup failures on Python runtimes bundled with\nearlier Unicode data.\n"
    },
    {
      "commit": "5c0453b1ba2e448d88025c10f60d0433b07f5f54",
      "tree": "55d7eee59a339fe8cc804846aec71c14161136a5",
      "parents": [
        "1f8ba4510848e3ceabd917d9ca799d2ff1956f65",
        "1b3c8bb3dce917e295cba93b683168c2a330f27f"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 01:48:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 01:48:57 2026"
      },
      "message": "Merge pull request #215 from kjd/housekeeping\n\nRepository housekeeping"
    },
    {
      "commit": "1b3c8bb3dce917e295cba93b683168c2a330f27f",
      "tree": "55d7eee59a339fe8cc804846aec71c14161136a5",
      "parents": [
        "f3cede8dcc4e3cb816212bd571e89408e7bf6347",
        "1f8ba4510848e3ceabd917d9ca799d2ff1956f65"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 01:47:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 01:47:25 2026"
      },
      "message": "Merge branch \u0027master\u0027 into housekeeping"
    },
    {
      "commit": "f3cede8dcc4e3cb816212bd571e89408e7bf6347",
      "tree": "08827046315675f5e7604ff5b7a1bcf75c0f4b1d",
      "parents": [
        "69e3c714a3c924adfab5e35472a9de156782941b"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 01:41:40 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 01:41:40 2026"
      },
      "message": "Tidy README wording on ASCII-compatible encoding and emoji domains\n"
    },
    {
      "commit": "69e3c714a3c924adfab5e35472a9de156782941b",
      "tree": "2a7e4ac94dceda5ad3716630ffb0734f5f245385",
      "parents": [
        "21cd5ddac6a1cc5e2bd4ae9e477ebe5f103f8225"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 01:34:35 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 01:34:35 2026"
      },
      "message": "Remove redundant flake8 and tidy CI configuration\n\n- Remove flake8 from CI workflow and optional dependencies (ruff handles linting)\n- Update actions/checkout pin in scorecard.yml to match other workflows\n- Remove leftover placeholder comment in deploy.yml\n"
    },
    {
      "commit": "21cd5ddac6a1cc5e2bd4ae9e477ebe5f103f8225",
      "tree": "35832bf3f11805c118182ba0040292d6fe2d7f99",
      "parents": [
        "1448ddb93b3164558d93c3ad12d451dbe9eb7a0b"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 01:01:38 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 01:01:38 2026"
      },
      "message": "Update copyright year to 2026\n"
    },
    {
      "commit": "1448ddb93b3164558d93c3ad12d451dbe9eb7a0b",
      "tree": "e251be3f4ea556565a4f99f0e33f0a97c434d877",
      "parents": [
        "d86e1a3aabc469dd855dfa8911e1b0fe111c5d36"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 00:59:38 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 00:59:38 2026"
      },
      "message": "Fix RST formatting of history file\n"
    },
    {
      "commit": "1f8ba4510848e3ceabd917d9ca799d2ff1956f65",
      "tree": "c92c4ff52fa6241158da0de31a6100433ad937fa",
      "parents": [
        "d86e1a3aabc469dd855dfa8911e1b0fe111c5d36",
        "3500a63d10aae79854c984b8329f1dfed1aaa420"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 00:51:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 00:51:47 2026"
      },
      "message": "Merge pull request #214 from kjd/update-github-actions-versions\n\nUpdate GitHub Actions to latest pinned versions"
    },
    {
      "commit": "3500a63d10aae79854c984b8329f1dfed1aaa420",
      "tree": "c92c4ff52fa6241158da0de31a6100433ad937fa",
      "parents": [
        "d86e1a3aabc469dd855dfa8911e1b0fe111c5d36"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 00:48:36 2026"
      },
      "committer": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 00:48:36 2026"
      },
      "message": "Update GitHub Actions to latest pinned versions\n\n- actions/checkout v4.2.2 -\u003e v6.0.2\n- actions/setup-python v5.6.0 -\u003e v6.2.0\n- actions/upload-artifact v4.6.2 -\u003e v7.0.1\n- actions/download-artifact v4.3.0 -\u003e v8.0.1\n- pypa/gh-action-pypi-publish v1.12.4 -\u003e v1.14.0\n- sigstore/gh-action-sigstore-python v3.0.0 -\u003e v3.3.0\n- ossf/scorecard-action v2.4.0 -\u003e v2.4.3\n- github/codeql-action v2.2.4 -\u003e v3.35.2\n"
    },
    {
      "commit": "d86e1a3aabc469dd855dfa8911e1b0fe111c5d36",
      "tree": "361365792577b66787b4c3f5e4e310e6fdf1903d",
      "parents": [
        "9de708980608399cb4dc8ced963d037c28928342",
        "a6d7c40e261bc1f14a9a9eb7154ab2194368ec58"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 00:41:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 00:41:33 2026"
      },
      "message": "Merge pull request #211 from rodrigobnogueira/fix-import-time-regression\n\nFix import time regression by lazy-loading joining_types"
    },
    {
      "commit": "a6d7c40e261bc1f14a9a9eb7154ab2194368ec58",
      "tree": "361365792577b66787b4c3f5e4e310e6fdf1903d",
      "parents": [
        "bb5dd48d0db96d6c0368900208171e51599c1814",
        "9de708980608399cb4dc8ced963d037c28928342"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 00:30:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 00:30:32 2026"
      },
      "message": "Merge branch \u0027master\u0027 into fix-import-time-regression"
    },
    {
      "commit": "9de708980608399cb4dc8ced963d037c28928342",
      "tree": "36b2c1c2c9dc0178cf23000d519671eda6da39e8",
      "parents": [
        "2309a9c3df2302527cbc14870043412c8ffc6598",
        "4ed3a9e20b6d365f4fdfa9e1ec89b08af14590b1"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 00:20:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 00:20:25 2026"
      },
      "message": "Merge pull request #213 from kjd/claude/optimize-uts46data-011CUKAuVHNzTcaaB1JgeycG\n\nOptimize uts46data.py for better performance (fixes #203)"
    },
    {
      "commit": "4ed3a9e20b6d365f4fdfa9e1ec89b08af14590b1",
      "tree": "36b2c1c2c9dc0178cf23000d519671eda6da39e8",
      "parents": [
        "ee27cb4bb717f34aa6eec5b4f476c13fe5906e50",
        "2309a9c3df2302527cbc14870043412c8ffc6598"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Tue Apr 21 00:17:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 21 00:17:53 2026"
      },
      "message": "Merge branch \u0027master\u0027 into claude/optimize-uts46data-011CUKAuVHNzTcaaB1JgeycG"
    },
    {
      "commit": "2309a9c3df2302527cbc14870043412c8ffc6598",
      "tree": "5e23137084638b13a153323f1c8fd155f38357db",
      "parents": [
        "dfe1beaa9363bb92328d32ee1c431ae974108c1d",
        "a9c1aa1f95ec1dc05f894a85416200692c1fce15"
      ],
      "author": {
        "name": "Kim Davies",
        "email": "kim@cynosure.com.au",
        "time": "Mon Apr 20 22:52:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 20 22:52:58 2026"
      },
      "message": "Merge pull request #212 from Nadav0077/https-unicode-fetch\n\nUse HTTPS when downloading Unicode data"
    },
    {
      "commit": "a9c1aa1f95ec1dc05f894a85416200692c1fce15",
      "tree": "5e23137084638b13a153323f1c8fd155f38357db",
      "parents": [
        "dfe1beaa9363bb92328d32ee1c431ae974108c1d"
      ],
      "author": {
        "name": "Nadav0077",
        "email": "18245584+Nadav0077@users.noreply.github.com",
        "time": "Sun Apr 19 16:42:37 2026"
      },
      "committer": {
        "name": "Nadav0077",
        "email": "18245584+Nadav0077@users.noreply.github.com",
        "time": "Sun Apr 19 16:42:37 2026"
      },
      "message": "Use HTTPS when downloading Unicode data\n\nunicode.org has supported HTTPS for a long time, so there\u0027s no reason to keep fetching the UCD and UTS #46 files over plain HTTP. These downloads end up baked into idnadata.py and uts46data.py, which ship in the released package, so using TLS closes a small tampering window if a release is ever built on an untrusted network.\n"
    },
    {
      "commit": "bb5dd48d0db96d6c0368900208171e51599c1814",
      "tree": "2fc926eb6cd9d6a3ebc922cdc6dd7da8033eda8d",
      "parents": [
        "67ac5ac2f87f687c306424c4fdde798b344e4501"
      ],
      "author": {
        "name": "rodrigo.nogueira",
        "email": "rodrigo.nogueira@prf.gov.br",
        "time": "Thu Feb 12 17:59:12 2026"
      },
      "committer": {
        "name": "rodrigo.nogueira",
        "email": "rodrigo.nogueira@prf.gov.br",
        "time": "Thu Feb 12 17:59:12 2026"
      },
      "message": "feat: update IDNA data to Unicode 16.0.0 and standardize type hints in generated code.\n"
    },
    {
      "commit": "67ac5ac2f87f687c306424c4fdde798b344e4501",
      "tree": "d47297c85ce842569dbde8618f78e890bd9d2462",
      "parents": [
        "dfe1beaa9363bb92328d32ee1c431ae974108c1d"
      ],
      "author": {
        "name": "rodrigo.nogueira",
        "email": "rodrigo.nogueira@prf.gov.br",
        "time": "Fri Feb 06 20:16:55 2026"
      },
      "committer": {
        "name": "rodrigo.nogueira",
        "email": "rodrigo.nogueira@prf.gov.br",
        "time": "Fri Feb 06 22:08:01 2026"
      },
      "message": "Fix import time regression by lazy-loading joining_types\n\nAddresses #188. The joining_types dictionary (used for CONTEXTJ validation)\nis now wrapped in a @lru_cache(None)-decorated function to defer dictionary\nconstruction until first access. Uses lru_cache instead of cache for Python\n3.8+ compatibility.\n\n- Modified tools/idna-data generator to emit lazy-loaded format\n- Updated core.py to call joining_types() as a function\n- Manually regenerated idnadata.py (generator could not run due to network)\n\nThis reduces import time by ~53% (from ~6.5ms to ~3.1ms).\n"
    },
    {
      "commit": "ee27cb4bb717f34aa6eec5b4f476c13fe5906e50",
      "tree": "0d076259c4d744861cf368d777d9ebee70cdb27b",
      "parents": [
        "dfe1beaa9363bb92328d32ee1c431ae974108c1d"
      ],
      "author": {
        "name": "Claude",
        "email": "noreply@anthropic.com",
        "time": "Mon Oct 20 21:41:04 2025"
      },
      "committer": {
        "name": "Claude",
        "email": "noreply@anthropic.com",
        "time": "Mon Oct 20 21:41:04 2025"
      },
      "message": "Optimize uts46data.py for better performance (fixes #203)\n\nThis commit simplifies uts46data.py by replacing the segmented function\napproach with a single tuple literal, resulting in significant performance\nand size improvements.\n\nChanges:\n- Removed 84 segment functions (_seg_0 through _seg_83)\n- Replaced with single tuple literal assignment\n- Updated tools/idna-data generator to produce optimized format\n- Removed obsolete UTS46_SEGMENT_SIZE constant\n\nBenefits:\n- File size reduced from 239KB to 197KB (17.6% smaller)\n- Line count reduced from 8,841 to 8,336 (5.7% fewer lines)\n- Faster module import (no function calls or list concatenations at import time)\n- Simpler, more maintainable code structure\n- All 6,366 tests pass successfully\n\nThe new format uses a direct tuple literal which is more efficient for\nPython to parse and load, eliminating the overhead of:\n- 84 function definitions and calls\n- List object creation and concatenation\n- List-to-tuple conversion\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n"
    }
  ],
  "next": "dfe1beaa9363bb92328d32ee1c431ae974108c1d"
}
