)]}'
{
  "log": [
    {
      "commit": "8f767776326faaed11e6c2974798787f6e19b343",
      "tree": "d3d1aeff675c0eeb417b170cb93d1fb87ab78ac1",
      "parents": [
        "764bf92a1c96abe4615b59f3e5a7b738b0340a94"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Sep 01 07:01:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 07:01:54 2026"
      },
      "message": "build(deps): bump the github-actions group with 5 updates (#1617)\n\nBumps the github-actions group with 5 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [re-actors/alls-green](https://github.com/re-actors/alls-green) | `1.2.2` | `1.3.0` |\n| [github/codeql-action/init](https://github.com/github/codeql-action) | `4.37.4` | `4.37.8` |\n| [github/codeql-action/autobuild](https://github.com/github/codeql-action) | `4.37.4` | `4.37.8` |\n| [github/codeql-action/analyze](https://github.com/github/codeql-action) | `4.37.4` | `4.37.8` |\n| [CodSpeedHQ/action](https://github.com/codspeedhq/action) | `5.0.1` | `5.2.1` |\n\n\nUpdates `re-actors/alls-green` from 1.2.2 to 1.3.0\n- [Release notes](https://github.com/re-actors/alls-green/releases)\n- [Commits](https://github.com/re-actors/alls-green/compare/05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe...b5b5b37504aa4183270bd3d855c52a67f212be35)\n\nUpdates `github/codeql-action/init` from 4.37.4 to 4.37.8\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/f205ea1c3313d32999d8d6a48b4f6530d4437b38...db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28)\n\nUpdates `github/codeql-action/autobuild` from 4.37.4 to 4.37.8\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/f205ea1c3313d32999d8d6a48b4f6530d4437b38...db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28)\n\nUpdates `github/codeql-action/analyze` from 4.37.4 to 4.37.8\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/f205ea1c3313d32999d8d6a48b4f6530d4437b38...db488ddef3bf6cb639b32c2e9a7c0a7ea8271d28)\n\nUpdates `CodSpeedHQ/action` from 5.0.1 to 5.2.1\n- [Release notes](https://github.com/codspeedhq/action/releases)\n- [Changelog](https://github.com/CodSpeedHQ/action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codspeedhq/action/compare/88472375d0a4572cf70a9f1fe3a4e0ab8da1b924...373d6868929f444bc08d901fd0eb0ad52a8875ea)\n\n---\nupdated-dependencies:\n- dependency-name: re-actors/alls-green\n  dependency-version: 1.3.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: github-actions\n- dependency-name: github/codeql-action/init\n  dependency-version: 4.37.8\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: github-actions\n- dependency-name: github/codeql-action/autobuild\n  dependency-version: 4.37.8\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: github-actions\n- dependency-name: github/codeql-action/analyze\n  dependency-version: 4.37.8\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: github-actions\n- dependency-name: CodSpeedHQ/action\n  dependency-version: 5.2.1\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "764bf92a1c96abe4615b59f3e5a7b738b0340a94",
      "tree": "5da987ed322202a66d958f6b8b1db0eee66c947f",
      "parents": [
        "dc1ca3892c0285f2a3980e1fd08d50728fd1eaec"
      ],
      "author": {
        "name": "James Beith",
        "email": "james@beith.co.uk",
        "time": "Thu Aug 27 07:08:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 07:08:06 2026"
      },
      "message": "Fix comparison operators in API docs error messages (#1615)"
    },
    {
      "commit": "dc1ca3892c0285f2a3980e1fd08d50728fd1eaec",
      "tree": "5bd685779053b6b053c9db4b2defbdd6cc08b7a5",
      "parents": [
        "30fd617c45854a5555550c9a0bf921bc3ee28786"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Aug 25 05:35:38 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Aug 25 05:35:38 2026"
      },
      "message": "docs: fix docstring example indent\n"
    },
    {
      "commit": "30fd617c45854a5555550c9a0bf921bc3ee28786",
      "tree": "1ab4e425129b3e41340845ed0dee407df6c63126",
      "parents": [
        "c1dc5dcba16ed827aa6dcad896b41a3afedb4e32"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Aug 18 08:38:58 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Aug 18 08:38:58 2026"
      },
      "message": "Add warning\n"
    },
    {
      "commit": "c1dc5dcba16ed827aa6dcad896b41a3afedb4e32",
      "tree": "cba2bb49c6df962d90390f5c82a990a2b2a7b4a4",
      "parents": [
        "3bb6382a7ca4ebe681386e3c6b8106993a4d194f"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Aug 07 05:35:45 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Aug 07 05:35:45 2026"
      },
      "message": "oops\n"
    },
    {
      "commit": "3bb6382a7ca4ebe681386e3c6b8106993a4d194f",
      "tree": "96b4e6351c990ed2d4d5a304918b4132247d9d0b",
      "parents": [
        "1ea13ff576c14907280d080c33fa5d25f968f30e"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Aug 07 05:25:37 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Aug 07 05:25:37 2026"
      },
      "message": "Document/test copy.replace\n\nyay Pyrefly\n"
    },
    {
      "commit": "1ea13ff576c14907280d080c33fa5d25f968f30e",
      "tree": "7ccf09e097c698334a830a6e06e1f36bedb8ace1",
      "parents": [
        "51e8a602f3a5d9e1e0c3f8ccf014a3567a1f7c78"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Thu Aug 06 13:01:47 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Thu Aug 06 13:01:58 2026"
      },
      "message": "update sponsors\n"
    },
    {
      "commit": "51e8a602f3a5d9e1e0c3f8ccf014a3567a1f7c78",
      "tree": "a38d91edf85416637b82e23112540c85799b94b0",
      "parents": [
        "42f56c998ab1ec5883148913b29e89ec597692e5"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Aug 04 07:44:24 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Aug 04 07:44:24 2026"
      },
      "message": "Amend AI policy\n"
    },
    {
      "commit": "42f56c998ab1ec5883148913b29e89ec597692e5",
      "tree": "75889a3c9189b2179f43f7083c8e73d6e19b0165",
      "parents": [
        "b6f6f76d77b48066812d8ebc87e68f5f891baff0"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Aug 04 07:41:31 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Aug 04 07:41:31 2026"
      },
      "message": "Only run codspeed against PRs\n"
    },
    {
      "commit": "b6f6f76d77b48066812d8ebc87e68f5f891baff0",
      "tree": "c9b20bd4bcf26484700edb616547261415f52eb2",
      "parents": [
        "24cbcf1b543a7cbc67d74bc4a81602e81466c3fb"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Aug 04 06:35:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 06:35:26 2026"
      },
      "message": "ci: build docs with default Python, too (#1609)"
    },
    {
      "commit": "24cbcf1b543a7cbc67d74bc4a81602e81466c3fb",
      "tree": "c4cfe06de415ce1b86d90a64a0076dfc4fad88ff",
      "parents": [
        "65c80d7ddf4ca87b9638334fc24e60080d3dcd9b"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Aug 04 05:28:15 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Aug 04 05:28:23 2026"
      },
      "message": "ci: don\u0027t rely on uv\u0027s Python downloads for lint\n"
    },
    {
      "commit": "65c80d7ddf4ca87b9638334fc24e60080d3dcd9b",
      "tree": "823707b2f159ba4a0c092169bb230bb38e5faed3",
      "parents": [
        "e43b1f9026d18a5ac227e7a7c65c7ccbf5d5e07f"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Aug 03 13:18:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 03 13:18:02 2026"
      },
      "message": "Add tox to lockfile (#1608)\n\n* Add tox to lockfile\n\n* Run type checks with default Python"
    },
    {
      "commit": "e43b1f9026d18a5ac227e7a7c65c7ccbf5d5e07f",
      "tree": "c57d0bffdbf6dc4ab1c8e9a1725c450432a89494",
      "parents": [
        "58c8e9ade6fa4723199e9fd938e7130f079eb2cd"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Aug 03 09:09:11 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Aug 03 09:09:11 2026"
      },
      "message": "Dedup Python version in RTD\n"
    },
    {
      "commit": "58c8e9ade6fa4723199e9fd938e7130f079eb2cd",
      "tree": "25b44454443d76f5152f760a1fd275344033c7d9",
      "parents": [
        "1dcdab44344ffd121acd8b67448c0d1915bc17e0"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Aug 03 09:01:34 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Aug 03 09:01:48 2026"
      },
      "message": "Make typing tests importable to have a namespace\n"
    },
    {
      "commit": "1dcdab44344ffd121acd8b67448c0d1915bc17e0",
      "tree": "716b0bb2f196c47f0105650a50fd66822cde8532",
      "parents": [
        "5c2d9bef37913314101c912fcd95ae9e93ca503e"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Aug 03 06:54:05 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Aug 03 06:54:05 2026"
      },
      "message": "dev: use modern package\u003dskip\n"
    },
    {
      "commit": "5c2d9bef37913314101c912fcd95ae9e93ca503e",
      "tree": "bac22db41eb9658ce1e36121552538617e617e68",
      "parents": [
        "8ea85ef83fa086b2d4b6a1d3d683adca26dac6ca"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Aug 03 06:26:15 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Aug 03 06:26:15 2026"
      },
      "message": "Add ty and Pyrefly to dev\n"
    },
    {
      "commit": "8ea85ef83fa086b2d4b6a1d3d683adca26dac6ca",
      "tree": "a34827c9113ed7c8782e07861f7392123fe6d821",
      "parents": [
        "f53fc5440d7f86aac4328aec7a563eb48634177f"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Aug 03 06:19:18 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Aug 03 06:19:18 2026"
      },
      "message": "dev: move linting into dev group\n"
    },
    {
      "commit": "f53fc5440d7f86aac4328aec7a563eb48634177f",
      "tree": "c078cc64795b11e9154f10dd23008dd79f5012b5",
      "parents": [
        "f38b8a3f1625060aa4245930822c34c11c252f83"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Aug 02 11:46:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 02 11:46:58 2026"
      },
      "message": "Stop evolve dunders from being modified (#1606)\n\n* Stop evolve dunders from being modified\n\n* Better name, test both ways"
    },
    {
      "commit": "f38b8a3f1625060aa4245930822c34c11c252f83",
      "tree": "9f8fd3773241a3e6d4d24124fa8bf5e13bc5cc5b",
      "parents": [
        "3e01de41b0efb9f51b92cc3372477be92033f4a8"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Aug 02 10:21:33 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Aug 02 10:21:33 2026"
      },
      "message": "docs: format notice\n"
    },
    {
      "commit": "3e01de41b0efb9f51b92cc3372477be92033f4a8",
      "tree": "7869fb95ce919cb2e89aad33c812240524573781",
      "parents": [
        "29b608137636417fbfdb6586ca42b58a540f8077"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Aug 02 09:43:44 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Aug 02 09:43:44 2026"
      },
      "message": "docs: fix markup\n"
    },
    {
      "commit": "29b608137636417fbfdb6586ca42b58a540f8077",
      "tree": "d5ebd2c8999b9c17c70989d7faacb677c88716db",
      "parents": [
        "21b5746de7d428efe190ad9b895f68eff5c67c20"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Aug 02 09:30:28 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Aug 02 09:30:28 2026"
      },
      "message": "docs: remove stale 3.9 references\n"
    },
    {
      "commit": "21b5746de7d428efe190ad9b895f68eff5c67c20",
      "tree": "d74266ed544b845250a8d723efef3f9b0e808119",
      "parents": [
        "9b98a730bf71cabae9bcedb8a3aac72289c23733"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Aug 02 09:20:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 02 09:20:59 2026"
      },
      "message": "Modernize tox (#1604)\n\n* Modernize tox\n\n* Fix tox coverage paths\n\n* Fix var name"
    },
    {
      "commit": "9b98a730bf71cabae9bcedb8a3aac72289c23733",
      "tree": "ebc47383176ae82ff4a8a108e962e0e5ecb5177b",
      "parents": [
        "c1c1e0e25f855be68caf1d1a1dfa832a25acbf58"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Aug 02 09:06:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 02 09:06:06 2026"
      },
      "message": "Drop Python 3.9 (#1603)"
    },
    {
      "commit": "c1c1e0e25f855be68caf1d1a1dfa832a25acbf58",
      "tree": "85d9c2a5aab63016d21895974df44b5a8588814c",
      "parents": [
        "116681b67e3e3c82457df38a64908dbeec2669ea"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Aug 02 07:11:58 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Aug 02 07:11:58 2026"
      },
      "message": "dev: fix linting\n"
    },
    {
      "commit": "116681b67e3e3c82457df38a64908dbeec2669ea",
      "tree": "de3d2a60186556b59234a7bcef6d9c4fb1ab2fc9",
      "parents": [
        "5aa76a4450c311d87eda43946ec0ecd743572649"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Aug 02 07:03:01 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Aug 02 07:03:01 2026"
      },
      "message": "update\n"
    },
    {
      "commit": "5aa76a4450c311d87eda43946ec0ecd743572649",
      "tree": "246b801996a7b9ea1c2e603f38a87550e188d103",
      "parents": [
        "f616f732c6c5f87a8f7a762176422baed250a6be"
      ],
      "author": {
        "name": "James Beith",
        "email": "james@beith.co.uk",
        "time": "Sat Aug 01 12:40:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 01 12:40:48 2026"
      },
      "message": "Add `ne` validator (#1571)\n\n* Fix inconsistent formatting for Args and Raises docstrings\n\n* Add `ne` validator\n\nThis change adds a validator that raises `ValueError` if the\ninitializer is called with a number equal to *val*.\n\nAn example use case. I want a field that is a signed `int` of any\nvalue except for zero. I could do the following.\n\n```python\nattrs.field(\n    validator\u003dattrs.validators.or_(\n        attrs.validators.le(-1),\n        attrs.validators.ge(1),\n    )\n)\n```\n\nWith this proposed `ne` validator I could do.\n\n```python\nattrs.field(validator\u003dattrs.validators.ne(0))\n```\n\n* Fix news fragments\n\n---------\n\nCo-authored-by: Hynek Schlawack \u003chs@ox.cx\u003e"
    },
    {
      "commit": "f616f732c6c5f87a8f7a762176422baed250a6be",
      "tree": "010739097df4dd74dfe1dd2bb51973daa3cf9b7e",
      "parents": [
        "4b5b295bb815bf845fa3570bf63781a88212db40"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Aug 01 12:12:11 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Aug 01 12:12:11 2026"
      },
      "message": "docs: be more general\n"
    },
    {
      "commit": "4b5b295bb815bf845fa3570bf63781a88212db40",
      "tree": "457329a9aaa93c5ae096a444ab6d7178610c1e3f",
      "parents": [
        "d3a98cf05ab15769003dcca3eae91cdd6504b83b"
      ],
      "author": {
        "name": "Vladyslav Fedoriuk",
        "email": "vlad.fedoriuk2000@gmail.com",
        "time": "Sat Aug 01 12:07:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 01 12:07:54 2026"
      },
      "message": "Make on_setattr hooks accept generators (#1592)\n\n* Make on_setattr hooks accept generators\n\n* Adjust documentation of public APIs using on_setattr\n\n* Create a changelog file\n\n* [pre-commit.ci] auto fixes from pre-commit.com hooks\n\nfor more information, see https://pre-commit.ci\n\n* Update changelog.d/1592.change.md\n\nCo-authored-by: 🇺🇦 Sviatoslav Sydorenko (Святослав Сидоренко) \u003cwk.cvs.github@sydorenko.org.ua\u003e\n\n* Fix version added comments\n\n* Remove the changelog Sphinx cross-reference\n\n* Optimize: only check corouting when generating method\n\n* docs\n\n* Tighten generator contract\n\n* Polish docstrings\n\n* Add type hints\n\n* Add example\n\n* Rephrase\n\n* fix math\n\n* be more explicit\n\n* align\n\n* Add missing lazy import\n\n* Make inspect import lazy\n\n* Create a lazy/caching generator detector\n\n* Make generator detection lazy\n\n* Use in setters too\n\n* Don\u0027t check pipe hooks for generators\n\n---------\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nCo-authored-by: 🇺🇦 Sviatoslav Sydorenko (Святослав Сидоренко) \u003cwk.cvs.github@sydorenko.org.ua\u003e\nCo-authored-by: Hynek Schlawack \u003chs@ox.cx\u003e"
    },
    {
      "commit": "d3a98cf05ab15769003dcca3eae91cdd6504b83b",
      "tree": "9b9d8e209da0bdf1b9f6fdc707cfd1ced703e271",
      "parents": [
        "79fb1645a17118666144ead131a88fdc8d8cd59f"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Aug 01 12:06:29 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Aug 01 12:06:34 2026"
      },
      "message": "Fix docstring\n"
    },
    {
      "commit": "79fb1645a17118666144ead131a88fdc8d8cd59f",
      "tree": "f0a69c472707a48262e6ba89268cfebc837b061c",
      "parents": [
        "446b8bf6fcb226d843d9e37b6591f3ace35701fd"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Aug 01 10:01:30 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Aug 01 10:01:30 2026"
      },
      "message": "dev: add LSP-friendly config for ty\n"
    },
    {
      "commit": "446b8bf6fcb226d843d9e37b6591f3ace35701fd",
      "tree": "a7148a83efce24c4665e6154a4684e470d2d14b3",
      "parents": [
        "676b43aef91374bbd10910993b8120b0a4adbfe0"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Aug 01 09:29:03 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Aug 01 09:29:03 2026"
      },
      "message": "docs: CTA\n"
    },
    {
      "commit": "676b43aef91374bbd10910993b8120b0a4adbfe0",
      "tree": "daf52134ee28281fad7b3264a3bd08b5030421d5",
      "parents": [
        "557d997e8add985590403d9a2957027094b0013b"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Aug 01 09:23:13 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Aug 01 09:23:26 2026"
      },
      "message": "docs: don\u0027t even tell people about legacy types\n"
    },
    {
      "commit": "557d997e8add985590403d9a2957027094b0013b",
      "tree": "fc2635169f22e222657ebd696acfc5ac790fe32c",
      "parents": [
        "82b3073c282ba4d06d3c1f8c847b97ba0f3da644"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Aug 01 09:20:52 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Aug 01 09:23:26 2026"
      },
      "message": "docs: order by integration quality\n"
    },
    {
      "commit": "82b3073c282ba4d06d3c1f8c847b97ba0f3da644",
      "tree": "5a45170acbf415f241db8b793df82708199d3665",
      "parents": [
        "27e741360a60f7be64f665934ba2b0d1b5f21d13"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Aug 01 09:19:17 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Aug 01 09:23:19 2026"
      },
      "message": "docs: better section title\n"
    },
    {
      "commit": "27e741360a60f7be64f665934ba2b0d1b5f21d13",
      "tree": "98b32a3bf44e5f1acf0273722f2538df69395bbe",
      "parents": [
        "c5baf90dbc3fdb23628ad59e92986c01bae57f4f"
      ],
      "author": {
        "name": "Shobhit Mehrotra",
        "email": "131730833+shobhitmehro@users.noreply.github.com",
        "time": "Sat Aug 01 09:09:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 01 09:09:58 2026"
      },
      "message": "Revise Pyrefly overview in types.md (#1594)\n\n* Revise Pyrefly overview in types.md\n\nUpdated Pyrefly description to reflect enhanced attrs support.\n\n* Refine Pyrefly description in types.md\n\nImproved clarity and formatting of the Pyrefly description.\n\n* Apply style\n\n---------\n\nCo-authored-by: Hynek Schlawack \u003chs@ox.cx\u003e"
    },
    {
      "commit": "c5baf90dbc3fdb23628ad59e92986c01bae57f4f",
      "tree": "352422eb714f6d49c4840ef0a43e57c7cf83393b",
      "parents": [
        "97f8d175656bc03c373a1c9038048a4d312c307c"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Aug 01 09:07:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 01 09:07:03 2026"
      },
      "message": "Add typing examples for Pyrefly\u0027s new attrs support (#1588)\n\n* Add typing examples for Pyrefly\u0027s new attrs support\n\n* Add another (currently failing) example\n\n* update\n\n* move comment\n\n* Update to latest pyrefly\n\n* Pyrefly 1.2.0 final is out"
    },
    {
      "commit": "97f8d175656bc03c373a1c9038048a4d312c307c",
      "tree": "41a9fbec24967c1fffde9fa31f717c78524ac320",
      "parents": [
        "6851ab593cd25f3c14393e9355d57d22bec2a074"
      ],
      "author": {
        "name": "Wan Xiankai",
        "email": "xiankai.wan@gmail.com",
        "time": "Fri Jul 31 13:28:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 31 13:28:06 2026"
      },
      "message": "Fix ClassVar forward reference detection (#1593)\n\nfix: detect ClassVar forward refs\n\nCo-authored-by: Hynek Schlawack \u003chs@ox.cx\u003e"
    },
    {
      "commit": "6851ab593cd25f3c14393e9355d57d22bec2a074",
      "tree": "8c314ef00e921fac02d8d4194b2685efe48dbc5a",
      "parents": [
        "ca0f04585d3fb132c6e2f6baa9d7d966d8036760"
      ],
      "author": {
        "name": "Kevin Turcios",
        "email": "106575910+KRRT7@users.noreply.github.com",
        "time": "Fri Jul 31 09:41:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 31 09:41:48 2026"
      },
      "message": "Defer imports on the cold import path (#1600)\n\n* Defer imports and preserve module introspection\n\n* Reduce cold import overhead\n\n* Make more use-centric\n\n---------\n\nCo-authored-by: Hynek Schlawack \u003chs@ox.cx\u003e"
    },
    {
      "commit": "ca0f04585d3fb132c6e2f6baa9d7d966d8036760",
      "tree": "455cfb7b69b152c502f9e4c738a9e38f7da099c6",
      "parents": [
        "c27ba27258b314e8a03506a7677d47a699130b8f"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Jul 31 08:52:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 31 08:52:25 2026"
      },
      "message": "Codespeed macro integration (#1601)\n\nFlip runners"
    },
    {
      "commit": "c27ba27258b314e8a03506a7677d47a699130b8f",
      "tree": "ecd7ef3b58980705d113a4a718e9c0130b8ac76d",
      "parents": [
        "3f0e0fd83d632c6186ec2347003d2e3701737507"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Jul 31 08:31:20 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Jul 31 08:31:20 2026"
      },
      "message": "Reading comprehension would help\n"
    },
    {
      "commit": "3f0e0fd83d632c6186ec2347003d2e3701737507",
      "tree": "2c21229f95d92ecdfa501d5f541ff4be6b1296e4",
      "parents": [
        "c54fa8b6a0f6a22a77e009dc33c9a8803d7c0c3f"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Jul 31 08:29:39 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Jul 31 08:29:39 2026"
      },
      "message": "Remove zenodo badge\n"
    },
    {
      "commit": "c54fa8b6a0f6a22a77e009dc33c9a8803d7c0c3f",
      "tree": "7b3b533576160b83466c390deba854fb548a2708",
      "parents": [
        "0b9de0622a6f6b0a3c0264a46eb24f1288e2f2ec"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Jul 31 08:27:41 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Jul 31 08:27:41 2026"
      },
      "message": "Use codspeed macro\n"
    },
    {
      "commit": "0b9de0622a6f6b0a3c0264a46eb24f1288e2f2ec",
      "tree": "f03d75781eb5f328362c9871ca33f3f98c9a9730",
      "parents": [
        "b56f28cc4bc4bbc59b6b367360ba46be2c40c315"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Jul 31 08:05:10 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Jul 31 08:05:10 2026"
      },
      "message": "Switch import benchmarks to walltime\n\ncodspeed is complaining\n"
    },
    {
      "commit": "b56f28cc4bc4bbc59b6b367360ba46be2c40c315",
      "tree": "534da13a127fa7c4b5e8bb74d2fa540debaace78",
      "parents": [
        "92e12eae712ef88c1a7e322cc51b7cd9e271aa3c"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Jul 31 05:26:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 31 05:26:56 2026"
      },
      "message": "Add codspeed import time benchmarks (#1599)"
    },
    {
      "commit": "92e12eae712ef88c1a7e322cc51b7cd9e271aa3c",
      "tree": "8798df44d4abf35c6001b682477466385df1178f",
      "parents": [
        "4c438e0f92dc9a43480c10d9ecdab241bbede12a"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Thu Jul 30 11:22:34 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 11:22:34 2026"
      },
      "message": "Update dev \u0026 drop pre-commit.ci (#1597)\n\n* update dev\n\n* Double-locking Ruff is a PITA\n\n#tinWasRight\n\n* Move interrogate too\n\n* update docs"
    },
    {
      "commit": "4c438e0f92dc9a43480c10d9ecdab241bbede12a",
      "tree": "50d38e64f2d2098493c985d5c071f2ecee0496a8",
      "parents": [
        "f06ceaafbe5bdbdafad8a0c01a2daabb89386a42"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Thu Jul 30 09:05:52 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Thu Jul 30 09:05:52 2026"
      },
      "message": "update sponsors\n"
    },
    {
      "commit": "f06ceaafbe5bdbdafad8a0c01a2daabb89386a42",
      "tree": "c52b06758d0aca2574bf86bf59439845c8f5b133",
      "parents": [
        "358dec2c61e0213dd454a3240664cfb9924f3b56"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Jul 21 11:00:44 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Jul 21 11:00:44 2026"
      },
      "message": "docs: update why\n"
    },
    {
      "commit": "358dec2c61e0213dd454a3240664cfb9924f3b56",
      "tree": "bbcda46d0c8d4ea2fa576d0a00ac8c0ccff98cf6",
      "parents": [
        "0537788bacc6110ccabd235616e95ec4f72fa484"
      ],
      "author": {
        "name": "Mark Smith",
        "email": "judy@judy.co.uk",
        "time": "Sat Jul 18 12:10:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 18 12:10:54 2026"
      },
      "message": "Minor changes to the \"Why not…\" doc. (#1591)\n\n* Some idiom changes and breaking up some clauses to improve clarity.\n\n* Extensibility."
    },
    {
      "commit": "0537788bacc6110ccabd235616e95ec4f72fa484",
      "tree": "abfcfcc980ee3d3e517e1f9cf5e70409bdf2df85",
      "parents": [
        "d544dd2dacb4cbd660891e323ad92751ba65b4e0"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Jul 18 12:04:50 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Jul 18 12:04:50 2026"
      },
      "message": "Fix type and add rationale\n\nfixes #1540\ncloses #1590\n"
    },
    {
      "commit": "d544dd2dacb4cbd660891e323ad92751ba65b4e0",
      "tree": "96e98bee66e3c4b0b0362e6f4b0b39afda018737",
      "parents": [
        "45de9beb093d2142517ab7d1ebda6522e3d3c4ac"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Jul 11 14:51:44 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 11 14:51:44 2026"
      },
      "message": "update dev (#1589)"
    },
    {
      "commit": "45de9beb093d2142517ab7d1ebda6522e3d3c4ac",
      "tree": "045bcfe80f5c364bfe7517fbbab9f4292ceca293",
      "parents": [
        "ae37edd71a691b8ca797a0a53d0248543abfe12b"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Jul 05 08:07:31 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Jul 05 08:07:31 2026"
      },
      "message": "docs: move collect_by_mro to attr.s docstring\n"
    },
    {
      "commit": "ae37edd71a691b8ca797a0a53d0248543abfe12b",
      "tree": "986bcfe39ec563b8e6e656e5b1863adb0b4f20ce",
      "parents": [
        "b2fedf9a04238749db1ee416bd066a3c2b40b7fd"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Thu Jul 02 12:06:26 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Thu Jul 02 12:06:29 2026"
      },
      "message": "Fix AI link\n"
    },
    {
      "commit": "b2fedf9a04238749db1ee416bd066a3c2b40b7fd",
      "tree": "0a83197a8702f0be7e0540834915eeea3049cfb3",
      "parents": [
        "005e2fbe1a93a958946ba04aad0d8cf6e6d17d6a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jul 01 10:02:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 10:02:09 2026"
      },
      "message": "Bump the github-actions group with 3 updates (#1578)\n\nBumps the github-actions group with 3 updates: [actions/setup-python](https://github.com/actions/setup-python), [CodSpeedHQ/action](https://github.com/codspeedhq/action) and [zizmorcore/zizmor-action](https://github.com/zizmorcore/zizmor-action).\n\n\nUpdates `actions/setup-python` from 6.2.0 to 6.3.0\n- [Release notes](https://github.com/actions/setup-python/releases)\n- [Commits](https://github.com/actions/setup-python/compare/a309ff8b426b58ec0e2a45f0f869d46889d02405...ece7cb06caefa5fff74198d8649806c4678c61a1)\n\nUpdates `CodSpeedHQ/action` from 4.17.6 to 4.18.1\n- [Release notes](https://github.com/codspeedhq/action/releases)\n- [Changelog](https://github.com/CodSpeedHQ/action/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/codspeedhq/action/compare/63f3e98b61959fe67f146a3ff022e4136fe9bb9c...a4a36bb07c0638b0b4ca52bf1f3dad1b4289e52f)\n\nUpdates `zizmorcore/zizmor-action` from 0.5.6 to 0.5.7\n- [Release notes](https://github.com/zizmorcore/zizmor-action/releases)\n- [Commits](https://github.com/zizmorcore/zizmor-action/compare/5f14fd08f7cf1cb1609c1e344975f152c7ee938d...192e21d79ab29983730a13d1382995c2307fbcaa)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-python\n  dependency-version: 6.3.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: github-actions\n- dependency-name: CodSpeedHQ/action\n  dependency-version: 4.18.1\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: github-actions\n- dependency-name: zizmorcore/zizmor-action\n  dependency-version: 0.5.7\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "005e2fbe1a93a958946ba04aad0d8cf6e6d17d6a",
      "tree": "f37ed494172261a151904e8cb3302c0abdaf7e5a",
      "parents": [
        "0b20bd1def24f42feffc493e220fe5b91578120a"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Jun 19 11:21:08 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Jun 19 11:21:08 2026"
      },
      "message": "update dev\n"
    },
    {
      "commit": "0b20bd1def24f42feffc493e220fe5b91578120a",
      "tree": "97aafdd67c402390384be379544bfb5d98ae0b9c",
      "parents": [
        "89fae8300f484544c1b7678cea5efe58c551fbb9"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Jun 19 11:20:21 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Fri Jun 19 11:20:21 2026"
      },
      "message": "docs: in this house we use endashes\n"
    },
    {
      "commit": "89fae8300f484544c1b7678cea5efe58c551fbb9",
      "tree": "b28cc1136b7b9254681293c05cfd9566c4a3bbcf",
      "parents": [
        "d2fbfccc1ce77dcc927a86eae9521c95dc4e289c"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Jun 06 07:07:27 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Jun 06 07:07:31 2026"
      },
      "message": "Apply 1 week of cooldown for dev deps\n"
    },
    {
      "commit": "d2fbfccc1ce77dcc927a86eae9521c95dc4e289c",
      "tree": "920e8dc915d4075029b90dcf50c329dfc182ecae",
      "parents": [
        "48ea7a120c841912195146a27223840612b2e861"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Tue Jun 02 06:54:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 02 06:54:56 2026"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#1570)\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.15.14 → v0.15.15](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.14...v0.15.15)\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "48ea7a120c841912195146a27223840612b2e861",
      "tree": "ae2c8223dce8b82ae703d2d8f24e9cf2a4edb9cd",
      "parents": [
        "24ce123bf0076d90391ee3b40c467927d604d558"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Thu May 28 16:42:26 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 16:42:26 2026"
      },
      "message": "dev: run Mypy on 3.15, too (#1568)\n\n🫡 @Julian"
    },
    {
      "commit": "24ce123bf0076d90391ee3b40c467927d604d558",
      "tree": "54d701f2d821f64006c2399d225b28334ce10308",
      "parents": [
        "512bd6d4d7e238a017673cd6b1e087d5544f1711"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Thu May 28 08:35:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 28 08:35:58 2026"
      },
      "message": "Add 3.15 (#1564)\n\n* Add 3.15\n\n* Add news fragment\n\n* ci: exclude 3.15 from Mypy"
    },
    {
      "commit": "512bd6d4d7e238a017673cd6b1e087d5544f1711",
      "tree": "7189e5f0758be44f48b21680eccc82f5add4612a",
      "parents": [
        "3823062f1296242fe1ac620834540ffae4eba488"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Thu May 28 08:19:14 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Thu May 28 08:19:14 2026"
      },
      "message": "update dev\n"
    },
    {
      "commit": "3823062f1296242fe1ac620834540ffae4eba488",
      "tree": "24cc3bec59e91eabdca1a90b5ba59fc0ea4c58cc",
      "parents": [
        "69a9729a6879b37cee4930c85017da5dbc5fb6dd"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Thu May 07 09:59:07 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 07 09:59:07 2026"
      },
      "message": "update dev -- notably mypy 2.0 (#1553)"
    },
    {
      "commit": "69a9729a6879b37cee4930c85017da5dbc5fb6dd",
      "tree": "12a0289fd285a0ed4f42d5fbcafd9d2e84060ce4",
      "parents": [
        "87b7b4ae050cd75469c5d834172bce5299fa300b"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat May 02 09:04:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 02 09:04:12 2026"
      },
      "message": "update dev (#1552)"
    },
    {
      "commit": "87b7b4ae050cd75469c5d834172bce5299fa300b",
      "tree": "9ad2a614674eadf298a7396bc10afc8fc778efaa",
      "parents": [
        "0f758fe54a8742110f730ebbaf146e79f3937c8d"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Wed Apr 29 06:08:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 29 06:08:12 2026"
      },
      "message": "docs: build on 3.14 (#1550)\n\n* docs: build on 3.14 and rely on presence of uv\n\n* Add sphinx config\n\n* There\u0027s no uv :(\n\n* What is even happening"
    },
    {
      "commit": "0f758fe54a8742110f730ebbaf146e79f3937c8d",
      "tree": "65a7bd51c0cd75dff4743b163710868facf7ccd5",
      "parents": [
        "57b314c0dc8e0b80c0ed8f61c0be81965137ea41"
      ],
      "author": {
        "name": "Cristian Le",
        "email": "github@lecris.me",
        "time": "Thu Apr 16 20:20:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 16 20:20:58 2026"
      },
      "message": "Expose converter as a decorator (#1541)\n\n* Expose converter as a decorator\n\n* Update docs/init.md\n\n* Update docs/init.md\n\n* Update src/attr/_make.py\n\n* Update src/attr/_make.py\n\n* Update src/attr/_make.py\n\n* Add missing import\n\n---------\n\nCo-authored-by: Hynek Schlawack \u003chs@ox.cx\u003e"
    },
    {
      "commit": "57b314c0dc8e0b80c0ed8f61c0be81965137ea41",
      "tree": "dd95d51d876800d318386898e673511aa1567917",
      "parents": [
        "eca2ff52a9412feeafed50db1c4ed85a68a04ad7"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Apr 14 05:37:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 05:37:23 2026"
      },
      "message": "Work around flaking mypy test (#1546)\n\nSeems like Pytest 9\u0027s new caching is confusing it."
    },
    {
      "commit": "eca2ff52a9412feeafed50db1c4ed85a68a04ad7",
      "tree": "49de0a42c59810dec8a7131427dc231043d8b5c6",
      "parents": [
        "834136e8f137d4dcc42b3c01f646a38df860ecd4"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Apr 14 05:28:06 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 14 05:28:06 2026"
      },
      "message": "update dev (#1545)"
    },
    {
      "commit": "834136e8f137d4dcc42b3c01f646a38df860ecd4",
      "tree": "dc1200ff68f614f09909e90c35a6b4fd957681af",
      "parents": [
        "f0e420b71af1a5cd5dbf43efd1a42aece6ce8f4e"
      ],
      "author": {
        "name": "Cristian Le",
        "email": "github@lecris.me",
        "time": "Mon Apr 13 16:51:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 16:51:16 2026"
      },
      "message": "Update mypy to 1.20.1 (#1542)\n\n* Update mypy to 1.20.1\n\n* Adjust tests for the new mypy"
    },
    {
      "commit": "f0e420b71af1a5cd5dbf43efd1a42aece6ce8f4e",
      "tree": "fe78294828f687095a55f800dfee17a140121d5e",
      "parents": [
        "20734d9cc6e4673c40e4a33bfa2bfaef946533d8"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Tue Apr 07 05:30:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 07 05:30:48 2026"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#1538)\n\n* [pre-commit.ci] pre-commit autoupdate\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.15.8 → v0.15.9](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.8...v0.15.9)\n\n* [pre-commit.ci] auto fixes from pre-commit.com hooks\n\nfor more information, see https://pre-commit.ci\n\n---------\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "20734d9cc6e4673c40e4a33bfa2bfaef946533d8",
      "tree": "1d1d24debce818196853a652fc549fe5ecfd3e48",
      "parents": [
        "9c2b7ed54b134dc1c3f0995fcb71131ebdd1450e"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Mar 30 18:18:34 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 30 18:18:34 2026"
      },
      "message": "Update dev (#1537)"
    },
    {
      "commit": "9c2b7ed54b134dc1c3f0995fcb71131ebdd1450e",
      "tree": "4b9cac997776c8617039db66a872252d93c50c02",
      "parents": [
        "0cb5cd692b09e1e95993f7f3389b8664e53b1648"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Mar 30 17:09:52 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Mar 30 17:09:52 2026"
      },
      "message": "Add Klaviyo\n"
    },
    {
      "commit": "0cb5cd692b09e1e95993f7f3389b8664e53b1648",
      "tree": "a35d86b1ed1199b4b83952184823f6092bae0a88",
      "parents": [
        "4885c5b1af4e9fa4d97b6bffa2fb78a2efa5f047"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Mar 29 06:31:00 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Mar 29 06:31:00 2026"
      },
      "message": "Consistent endashes\n"
    },
    {
      "commit": "4885c5b1af4e9fa4d97b6bffa2fb78a2efa5f047",
      "tree": "c7934cabd94da2f552c806f8c1d11105cb227939",
      "parents": [
        "25b74d6a4274d938b1ef15a4df658ad5d2c92310"
      ],
      "author": {
        "name": "Carlton Gibson",
        "email": "carlton.gibson@noumenal.es",
        "time": "Fri Mar 27 10:14:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 10:14:01 2026"
      },
      "message": "docs: use modern field API in \u0027boilerplate\u0027 section. (#1535)\n\n* docs: use modern field API in \u0027boilerplate\u0027 section.\n\n* Adjust for review comment\n\n* Tweak to second sentence.\n\n* Apply suggestion from @hynek\n\n---------\n\nCo-authored-by: Hynek Schlawack \u003chs@ox.cx\u003e"
    },
    {
      "commit": "25b74d6a4274d938b1ef15a4df658ad5d2c92310",
      "tree": "a246205900dd25910dadc02ed00642f5b278695b",
      "parents": [
        "caae397b596cab0e58b23eb83de3894581033e1e"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Aug 03 14:44:20 2024"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Thu Mar 19 15:07:30 2026"
      },
      "message": "Actually start new development cycle\n"
    },
    {
      "commit": "caae397b596cab0e58b23eb83de3894581033e1e",
      "tree": "f9ddc6cb8c5fbb73b493414776231565835acbae",
      "parents": [
        "7bfc49e9b22d5ba25b6e429524c3d49fee27cb36"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Thu Mar 19 14:15:18 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Thu Mar 19 14:15:18 2026"
      },
      "message": "Start new development cycle\n"
    },
    {
      "commit": "7bfc49e9b22d5ba25b6e429524c3d49fee27cb36",
      "tree": "31beb3550ee7198eba22b862471ad6ea7bfb16d2",
      "parents": [
        "31e02869da10824b492c378c1dc87ccc720ee5ad"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Thu Mar 19 14:06:02 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Thu Mar 19 14:06:02 2026"
      },
      "message": "Prepare 26.1.0\n"
    },
    {
      "commit": "31e02869da10824b492c378c1dc87ccc720ee5ad",
      "tree": "611945be1b4b6f815d56b9d795aaef22a8278a4e",
      "parents": [
        "48b8611c27779811d161200e17de8da24aae7feb"
      ],
      "author": {
        "name": "Victor Stinner",
        "email": "vstinner@python.org",
        "time": "Wed Mar 18 13:58:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 18 13:58:41 2026"
      },
      "message": "Update test_validators.py for Python 3.15a7 (#1530)\n\nmatches_re() error message changed in Python 3.15 alpha 7 with the\nintroduction of re.prefixmatch()."
    },
    {
      "commit": "48b8611c27779811d161200e17de8da24aae7feb",
      "tree": "c0b4e0b321bc8ca48ce60d993aea211bbfcc2be1",
      "parents": [
        "3a68d4913221abc6f8ad3be50937f7ae49300a98"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Mar 14 17:51:51 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 14 17:51:51 2026"
      },
      "message": "Add instance support to attrs.fields() (#1529)\n\n* Add instance support to attrs.fields()\n\nfixes #1400\n\n* fix pr#"
    },
    {
      "commit": "3a68d4913221abc6f8ad3be50937f7ae49300a98",
      "tree": "144284c38ef374563cec0b322319518f48795f26",
      "parents": [
        "a572c3a4c558a8b9b48cf989fcd956ab1a279439"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Mar 14 14:51:25 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Mar 14 14:51:58 2026"
      },
      "message": "dev: document missing git tags failure mode\n\nfixes #1490\n\nCo-authored-by: Aniruddha Saha \u003c9413090+ani0075saha@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "a572c3a4c558a8b9b48cf989fcd956ab1a279439",
      "tree": "5e7e7a30ec2862862cf3ef4f327b92b368b2a4c5",
      "parents": [
        "af9c510912ce604a94896cc35c27368d5baf6ae6"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Mar 14 14:33:41 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Mar 14 14:33:41 2026"
      },
      "message": "Allow field(on_setattr\u003dNO_OP) on frozen classes\n"
    },
    {
      "commit": "af9c510912ce604a94896cc35c27368d5baf6ae6",
      "tree": "cfba3915721207fe51a2debd9078d243b89f555d",
      "parents": [
        "ab7f8b2f4c0f747d5b1575247ce35e5adaad182e"
      ],
      "author": {
        "name": "Kadir Can Ozden",
        "email": "101993364+bysiber@users.noreply.github.com",
        "time": "Sat Mar 14 14:23:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 14 14:23:53 2026"
      },
      "message": "Fix validators.disabled() to save/restore state on nesting (#1513)\n\n* Fix validators.disabled() to save/restore previous state on nesting\n\n* Add news fragment\n\n* Add test\n\n* Add versionchanged tag\n\n---------\n\nCo-authored-by: Hynek Schlawack \u003chs@ox.cx\u003e"
    },
    {
      "commit": "ab7f8b2f4c0f747d5b1575247ce35e5adaad182e",
      "tree": "92d3bb9ff395948eca3ef4b4e30084ff084e814e",
      "parents": [
        "ce89f5d11feb0805da9ed10bb165238cc959f1bb"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Mar 14 13:18:05 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Mar 14 13:18:05 2026"
      },
      "message": "update dev\n"
    },
    {
      "commit": "ce89f5d11feb0805da9ed10bb165238cc959f1bb",
      "tree": "7fda7cabe8e5f7d36b7715a16013f9f2a2b16301",
      "parents": [
        "eccd966d80aff5196efc959316961cfa780439f9"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Mar 14 13:14:10 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Mar 14 13:14:10 2026"
      },
      "message": "Fix message passing in frozen errors\n\nFollow common exception workflows instead of working around it.\n\nfixes #1514\n"
    },
    {
      "commit": "eccd966d80aff5196efc959316961cfa780439f9",
      "tree": "5dc47922cb282f9be2214b2c381ab93bb5de7e00",
      "parents": [
        "e92fe52dfe1eb07167e6473724c5a8ada978add0"
      ],
      "author": {
        "name": "Finite State Machine",
        "email": "38001514+finite-state-machine@users.noreply.github.com",
        "time": "Sat Mar 14 13:04:04 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 14 13:04:04 2026"
      },
      "message": "Fix `optional` validator to accept tuples of len \u003e 1 (#1496)\n\n* Fix `optional` validator to accept tuples of len \u003e 1\n\n* Add changelog\n\n* Add `optional` validator over 2-tuple test case to `baseline.py`\n\n* [pre-commit.ci] auto fixes from pre-commit.com hooks\n\nfor more information, see https://pre-commit.ci\n\n* Work around `ty` false positive `invalid-argument-type`\n\n* [pre-commit.ci] auto fixes from pre-commit.com hooks\n\nfor more information, see https://pre-commit.ci\n\n* Revert \"fixes\" from pre-commit.com hooks [skip pre-commit.ci]\n\nThis reverts commit 5b413827365559bac9cb7b72e0b75a0ce4328772.\n\n* [pre-commit.ci] auto fixes from pre-commit.com hooks\n\nfor more information, see https://pre-commit.ci\n\n* Silence ty\n\nref https://github.com/astral-sh/ty/issues/3016\n\n---------\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e\nCo-authored-by: Hynek Schlawack \u003chs@ox.cx\u003e"
    },
    {
      "commit": "e92fe52dfe1eb07167e6473724c5a8ada978add0",
      "tree": "a7b6ddfecce709187f91a9340ce6bb15e9277a5b",
      "parents": [
        "928465a09c508916a7ceb4655a9312accdcc5092"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Mar 14 11:58:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 14 11:58:50 2026"
      },
      "message": "policies: tighten screws (#1528)"
    },
    {
      "commit": "928465a09c508916a7ceb4655a9312accdcc5092",
      "tree": "b105653c119b9d1805710e92de3522abf4125357",
      "parents": [
        "058d7324938085c7a7c09537c92d3980d68c643b"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Mar 08 18:42:57 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Mar 08 18:42:57 2026"
      },
      "message": "docs: further refinement"
    },
    {
      "commit": "058d7324938085c7a7c09537c92d3980d68c643b",
      "tree": "e21bcafd4a129946c1aaf6900f2c2335b3ec7cd2",
      "parents": [
        "65964fc4acf0b03e8578464af04b3342a835303c"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Mar 08 18:34:41 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Mar 08 18:34:41 2026"
      },
      "message": "docs: refine"
    },
    {
      "commit": "65964fc4acf0b03e8578464af04b3342a835303c",
      "tree": "656d5ec9613bd6682ac5d82735f0ae5a565a88dc",
      "parents": [
        "21a1028e2ff0566bc2a77d9c3f0741f02119ad26"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Mar 08 13:27:32 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 08 13:27:32 2026"
      },
      "message": "docs: overhaul types (#1526)\n\n* docs: overhaul types\n\n* typo\n\n* polish\n\n* [pre-commit.ci] auto fixes from pre-commit.com hooks\n\nfor more information, see https://pre-commit.ci\n\n* Fix link syntax\n\n* Mention VS Code more prominently\n\n* Pyright, ty, and Pyrefly handle frozen\n\n```\nimport attrs\n\n@attrs.frozen\nclass C:\n    x: int\n\ni \u003d C(42)\ni.x \u003d 23\n```\n\n/Users/hynek/FOSS/attrs/t.py\n  /Users/hynek/FOSS/attrs/t.py:9:3 - error: Cannot assign to attribute\n\"x\" for class \"C\"\n    Attribute \"x\" is read-only (reportAttributeAccessIssue)\n1 error, 0 warnings, 0 informations\n\n* improvements\n\n* wordsmith\n\n* mention runtime\n\n---------\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "21a1028e2ff0566bc2a77d9c3f0741f02119ad26",
      "tree": "c5b9ab96e0e5e3bb4db6bbd84cfea8a624807b54",
      "parents": [
        "862696afb52fb7c0d47d45e05ec4feb844c11001"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Mar 08 09:54:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Mar 08 09:54:58 2026"
      },
      "message": "Fix codspeed warning (#1527)"
    },
    {
      "commit": "862696afb52fb7c0d47d45e05ec4feb844c11001",
      "tree": "90a02e10eecf2038fb8340c7f7fa63685a2047bf",
      "parents": [
        "f3bcc37c3d2dc3199715f825a86b748c3b3805f9"
      ],
      "author": {
        "name": "Varun Chawla",
        "email": "34209028+veeceey@users.noreply.github.com",
        "time": "Sat Mar 07 09:20:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Mar 07 09:20:01 2026"
      },
      "message": "Resolve field aliases before calling field_transformer (#1509)\n\n* Resolve field aliases before calling field_transformer\n\nPreviously, field_transformer received attributes with alias\u003dNone for\nfields without an explicit alias. The default alias (e.g., stripping\nleading underscores) was only resolved after the transformer ran, making\nit impossible for transformers to access or use alias values.\n\nThis moves alias resolution to before the field_transformer call, so\ntransformers receive fully populated Attribute objects. A second pass\nafter the transformer handles any new fields the transformer may have\nadded.\n\nAdditionally, Attribute.evolve() now automatically updates the alias\nwhen the name changes, if the alias was auto-generated (matching the\ndefault for the old name). Explicit aliases are preserved.\n\nFixes #1479\n\n* Fix CI failures: update doctest, add changelog, fix coverage\n\n- Update extending.md doctest to reflect that field_transformer now\n  receives pre-resolved aliases (use alias \u003d\u003d name.lstrip(\"_\") instead\n  of `not field.alias` to detect auto-generated aliases)\n- Add changelog entry for #1479\n- Add test_hook_new_field_without_alias to cover the post-transformer\n  alias resolution path (line 496 of _make.py)\n\n* Fix pre-commit\n\n* Change is neat but breaking\n\nPoint change at PR, not bug.\n\n* Handle default alias detection explicitly\n\n* Fix docs build\n\n* We actually load 25.3-style\n\n---------\n\nCo-authored-by: Hynek Schlawack \u003chs@ox.cx\u003e"
    },
    {
      "commit": "f3bcc37c3d2dc3199715f825a86b748c3b3805f9",
      "tree": "37a5c702fd158c4d65f1341c54a14e37162a7229",
      "parents": [
        "2173fc7049f7ea938b754e2563959d3c902dfaf4"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Wed Mar 04 05:39:43 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Wed Mar 04 05:39:43 2026"
      },
      "message": "docs: use public link in AI policy\n"
    },
    {
      "commit": "2173fc7049f7ea938b754e2563959d3c902dfaf4",
      "tree": "1a180b434371f5dd56d568c6dc4f2840feb3a5e4",
      "parents": [
        "390efdc41fcac3f6a51c9ed5bb2078c1f820d82f"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Mar 02 20:49:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 20:49:57 2026"
      },
      "message": "update dev (#1522)\n\n"
    },
    {
      "commit": "390efdc41fcac3f6a51c9ed5bb2078c1f820d82f",
      "tree": "1ea19e018ce332138ba6cb8ac1292abb0be89950",
      "parents": [
        "853d78e34de57aa2ecedd933c1b83ee0781b88af"
      ],
      "author": {
        "name": "pre-commit-ci[bot]",
        "email": "66853113+pre-commit-ci[bot]@users.noreply.github.com",
        "time": "Mon Mar 02 20:37:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 20:37:27 2026"
      },
      "message": "[pre-commit.ci] pre-commit autoupdate (#1523)\n\nupdates:\n- [github.com/astral-sh/ruff-pre-commit: v0.15.0 → v0.15.4](https://github.com/astral-sh/ruff-pre-commit/compare/v0.15.0...v0.15.4)\n\nCo-authored-by: pre-commit-ci[bot] \u003c66853113+pre-commit-ci[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "853d78e34de57aa2ecedd933c1b83ee0781b88af",
      "tree": "5c67bac008bd55b272c7a8fcb61d766276e56a78",
      "parents": [
        "46354916414ae32050818fa5e7532f5fa72278db"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Mar 02 15:08:56 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Mar 02 15:08:56 2026"
      },
      "message": "Build docs locally to prevent unnecessary CI breakage\n"
    },
    {
      "commit": "46354916414ae32050818fa5e7532f5fa72278db",
      "tree": "3002d88125e676e706df26ec98c62ae55fe0bde1",
      "parents": [
        "384267d742ab817af7393e08fc72789eedc46dcf"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Feb 23 09:06:21 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Mon Feb 23 09:06:21 2026"
      },
      "message": "Link prominently\n"
    },
    {
      "commit": "384267d742ab817af7393e08fc72789eedc46dcf",
      "tree": "3e08aa8aa5d146550105b448ff54598df525fd32",
      "parents": [
        "6468b669abd8c5f00bf7866e7deb311f99800a8b"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Feb 22 11:51:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Feb 22 11:51:53 2026"
      },
      "message": "docs: typo"
    },
    {
      "commit": "6468b669abd8c5f00bf7866e7deb311f99800a8b",
      "tree": "7034ad96772740563fd04d5334784c004a788ec2",
      "parents": [
        "97432db1abbd8d58f1b9712efc6580b7f613f625"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sun Feb 22 07:10:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Feb 22 07:10:14 2026"
      },
      "message": "Update pull request template"
    },
    {
      "commit": "97432db1abbd8d58f1b9712efc6580b7f613f625",
      "tree": "d12114245f93d853f10e026fc779e4520adfa397",
      "parents": [
        "fb9ea679f92ae5c911a3fce644fff763da2ca02b"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Sat Feb 21 19:03:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Feb 21 19:03:56 2026"
      },
      "message": "Add explicit AI policy (#1518)\n\n* Add explicit AI policy\n\n* Phrasing\n\n* Don\u0027t mix smart and dumb interpunction\n\n* Keep the crabs out"
    },
    {
      "commit": "fb9ea679f92ae5c911a3fce644fff763da2ca02b",
      "tree": "da6ad38251b22ea1c553eb4bdd417102c016dfef",
      "parents": [
        "53e7a9c3d47ebe431e1c9ca18fda74902a189620"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Feb 10 17:59:26 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Feb 10 17:59:36 2026"
      },
      "message": "Actually update\n"
    },
    {
      "commit": "53e7a9c3d47ebe431e1c9ca18fda74902a189620",
      "tree": "6073fa489040dc7518764dc2e8aef13e8ac5d9d6",
      "parents": [
        "c44b8b0052ca3a4594219efa702129e1537d8966"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Feb 10 16:41:27 2026"
      },
      "committer": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Tue Feb 10 16:41:27 2026"
      },
      "message": "sponsors: update URL\n"
    },
    {
      "commit": "c44b8b0052ca3a4594219efa702129e1537d8966",
      "tree": "9ad47202068c4c5a2cd50adf195d5e6ef2d0c3b0",
      "parents": [
        "e140354a11de334f14d5345b1ebbde4157e69def"
      ],
      "author": {
        "name": "Hynek Schlawack",
        "email": "hs@ox.cx",
        "time": "Wed Feb 04 08:08:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 04 08:08:14 2026"
      },
      "message": "update dev (#1507)\n\n"
    }
  ],
  "next": "e140354a11de334f14d5345b1ebbde4157e69def"
}
