)]}'
{
  "log": [
    {
      "commit": "a6fc2104372c5ead29b020b9f7f3b4d1fe668a2c",
      "tree": "46813389d31573d2ebd04e34f42c75a6839beed6",
      "parents": [
        "d5ff4f38ba8cfdb939dedc9e5cd9d03c1fd9b93f",
        "54d1d0fb96d15d171a8394390b19630b66e64d98"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Nov 03 20:44:02 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Nov 03 20:44:02 2026"
      },
      "message": "Merge branch \u0027anti-ai-bot\u0027\n"
    },
    {
      "commit": "54d1d0fb96d15d171a8394390b19630b66e64d98",
      "tree": "1307883a55b9c3af9c312050bc50a3e596d88137",
      "parents": [
        "c7e6eb945a525f57c3843284e8f66ef4701af02c"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Nov 03 20:43:56 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Nov 03 20:43:56 2026"
      },
      "message": "Anti AI slop bot: try to recognize AI farms\n"
    },
    {
      "commit": "d5ff4f38ba8cfdb939dedc9e5cd9d03c1fd9b93f",
      "tree": "29cdd847b8a3d6b8b9959c8130bd6d5c73992a7a",
      "parents": [
        "c7e6eb945a525f57c3843284e8f66ef4701af02c"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Nov 03 19:29:07 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Nov 03 19:29:07 2026"
      },
      "message": "Fix psutil logo in the README\n"
    },
    {
      "commit": "c7e6eb945a525f57c3843284e8f66ef4701af02c",
      "tree": "9639199770e02e2342f619da64d42e7689d22a70",
      "parents": [
        "60c698704eea679db4a7a6d60368cbea574c00d5"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Nov 01 22:40:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Nov 01 22:40:47 2026"
      },
      "message": "CI: move the GitHub bots\u0027 API code into a shared ghlib.py (#3097)"
    },
    {
      "commit": "60c698704eea679db4a7a6d60368cbea574c00d5",
      "tree": "95835346acea553bd07bb983cf00cb7c7d4b39ed",
      "parents": [
        "b447f0362b0f98ed48d375cb1beea382a6b6c4df"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Nov 01 22:17:28 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Nov 01 22:17:28 2026"
      },
      "message": "CI: set ubuntu-24.04 to pin clang-format v18\n"
    },
    {
      "commit": "b447f0362b0f98ed48d375cb1beea382a6b6c4df",
      "tree": "1137cbb827171798b5f6b6c18f36e7e1a6aeda0f",
      "parents": [
        "6d33af457a17948ec31109c5cab7a3d1557979cf"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Nov 01 22:11:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Nov 01 22:11:13 2026"
      },
      "message": "AI policy (#3096)\n\nFor at least six months now, the majority of contributions I\u0027ve been\nreceiving are AI slop.\n\nThe most irritating ones are when someone (me, anybody) opens an issue,\nand literally 5 minutes later, somebody never seen before submits a PR\nto fix it. I suspect there are people subscribing to psutil\u0027s issue\ntracker just to get notified of new issues and immediately feed them to\nan AI agent, presumably to rack up contributions or gain some prestige.\n\nBesides being irritating, these PRs are completely useless to me. If I\nwanted an AI-generated fix, I could simply ask **my own** AI agent to do\nit.\n\nI\u0027m adding some rules to `CONTRIBUTING.md` to discourage this behavior.\nI don\u0027t expect that alone to make much difference, so I\u0027m also adding\n`AGENTS.md` to put those instructions directly in front of the AI agents\nthemselves. Let\u0027s see how it goes."
    },
    {
      "commit": "6d33af457a17948ec31109c5cab7a3d1557979cf",
      "tree": "6fc2b8a7d772a48fcbbfadd0185a14fdcdfe37a2",
      "parents": [
        "721af3d38b44d6d56b73434538b62f33fe96b7fb"
      ],
      "author": {
        "name": "ump45nose",
        "email": "52391318+ump45nose@users.noreply.github.com",
        "time": "Sun Nov 01 12:38:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Nov 01 12:38:11 2026"
      },
      "message": "Doc: remove the cpu_count() cache claim from its docstring (#3058)"
    },
    {
      "commit": "721af3d38b44d6d56b73434538b62f33fe96b7fb",
      "tree": "77509980ec7ba07d7a2613b1389dcebeeb835be0",
      "parents": [
        "020427c3554ab6c0e63d61d63ed09ffcb2e0dc1b"
      ],
      "author": {
        "name": "ump45nose",
        "email": "52391318+ump45nose@users.noreply.github.com",
        "time": "Sun Nov 01 12:37:56 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Nov 01 12:37:56 2026"
      },
      "message": "Doc: remove duplicated words in about.rst and api.rst (#3056)"
    },
    {
      "commit": "020427c3554ab6c0e63d61d63ed09ffcb2e0dc1b",
      "tree": "70a0edca91ead3e33959dc2043aca818fd6b4ccb",
      "parents": [
        "79d3d83b68abd7909795b0aa95ec012f92d0e139"
      ],
      "author": {
        "name": "ump45nose",
        "email": "52391318+ump45nose@users.noreply.github.com",
        "time": "Sun Nov 01 12:35:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Nov 01 12:35:58 2026"
      },
      "message": "Doc: TimeoutExpired has no msg constructor argument (#3064)"
    },
    {
      "commit": "79d3d83b68abd7909795b0aa95ec012f92d0e139",
      "tree": "4e6bff8d6b799a6179e1e8aaea2cf82c7c70175a",
      "parents": [
        "c24bae0a977d31f79ac820f3d18cfb33e1465a32"
      ],
      "author": {
        "name": "ump45nose",
        "email": "52391318+ump45nose@users.noreply.github.com",
        "time": "Sun Nov 01 12:35:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Nov 01 12:35:13 2026"
      },
      "message": "Doc: fix platform tags of STATUS_WAKING, STATUS_IDLE and STATUS_WAITING (#3065)"
    },
    {
      "commit": "c24bae0a977d31f79ac820f3d18cfb33e1465a32",
      "tree": "2eaece7e9d1624c7a842bdc9475b4fd4bc552487",
      "parents": [
        "dcd4ceba7d788cf754e407e144014b95dc88f856"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Oct 29 11:36:47 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Oct 29 11:36:47 2026"
      },
      "message": "Doc: tidy up the changelog and teach the /changelog bot the same rules\n\n- set proper section order for every release\n- entries with a label come first in their section\n- restyle labels\n- docs build fails on an unknown [Platform] tag.\n"
    },
    {
      "commit": "dcd4ceba7d788cf754e407e144014b95dc88f856",
      "tree": "fa314f4d5090f9d195eddb5d7b142fcd4bca9a50",
      "parents": [
        "1f73bee12050ff8ef84ddd20a7c48fd4466acf65"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 23:32:30 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 23:32:30 2026"
      },
      "message": "Doc: measure header height before first paint\n"
    },
    {
      "commit": "1f73bee12050ff8ef84ddd20a7c48fd4466acf65",
      "tree": "a8c0de0ee279f3abd1231bb0aacd6b91225e7505",
      "parents": [
        "7b09ed2607745419103cabcaa703a27dca5389f1"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 22:56:05 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 22:56:05 2026"
      },
      "message": "Doc: fix changelog typos\n"
    },
    {
      "commit": "7b09ed2607745419103cabcaa703a27dca5389f1",
      "tree": "f2f37447cfd1f59db17712556cb65aa0be4bfd97",
      "parents": [
        "47fec00695c1b9b7edf1348b7055258d330c4ab9"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 22:41:20 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 22:41:20 2026"
      },
      "message": "Doc: trim down changelog\n"
    },
    {
      "commit": "47fec00695c1b9b7edf1348b7055258d330c4ab9",
      "tree": "710d614fb507d2e06f1dc011eef96a6bd3832a8f",
      "parents": [
        "ed90f50e836cab962d8c39e348b46a202e071723"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 16:09:28 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 16:09:28 2026"
      },
      "message": "Doc: add prev/next to blog listing and general index\n"
    },
    {
      "commit": "ed90f50e836cab962d8c39e348b46a202e071723",
      "tree": "14028937198f6f758243030ce673856cc4964ab9",
      "parents": [
        "46f6e501fbec57912e5528e6825170670097c22e"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 16:01:13 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 16:01:13 2026"
      },
      "message": "Doc: avoid layout shifts on load (TOC first in HTML, no JS () stripping, exact header height)\n"
    },
    {
      "commit": "46f6e501fbec57912e5528e6825170670097c22e",
      "tree": "a29666f203ab4e603632b0c2ea784472ff1ffd11",
      "parents": [
        "0bca4fa202290aae46ba14b745513c408c113f2e"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 15:54:51 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 15:54:51 2026"
      },
      "message": "Doc: render copy page button and cached star count before first paint\n"
    },
    {
      "commit": "0bca4fa202290aae46ba14b745513c408c113f2e",
      "tree": "4232700c3db7883b37ba0a2ff298502107658525",
      "parents": [
        "d09bf1921a3b26d260fae88ad944a43235f82f81"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 15:44:30 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 15:44:30 2026"
      },
      "message": "Doc: code block syntax colors\n"
    },
    {
      "commit": "d09bf1921a3b26d260fae88ad944a43235f82f81",
      "tree": "409e4e499c5465b2db4dbaf8e120e443f1e16756",
      "parents": [
        "cb50d3768cba3b3cb008f513a46158fd156e1b70"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 14:28:15 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 14:28:15 2026"
      },
      "message": "Doc: crossfade the whole page on dark/light theme switch\n"
    },
    {
      "commit": "cb50d3768cba3b3cb008f513a46158fd156e1b70",
      "tree": "2df64f32e9c1d7b103949486b5f4a30b280c26d3",
      "parents": [
        "6680dcc4c6c5143052bb54f6926df60603a5aeec"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 13:39:43 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 13:39:43 2026"
      },
      "message": "Doc: style polish (code size, headings, sidebar, admonitions, mobile, blog, changelog labels, dark links)\n"
    },
    {
      "commit": "6680dcc4c6c5143052bb54f6926df60603a5aeec",
      "tree": "ba9c6c9e4c43ddf1d2fda9a6af98f09c2d401e3c",
      "parents": [
        "57abb142a1b0d3e46df0a123a7fa96aca0133f84"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 09:50:14 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 09:50:14 2026"
      },
      "message": "Doc: remove separator before next/prev block at the bottom\n"
    },
    {
      "commit": "57abb142a1b0d3e46df0a123a7fa96aca0133f84",
      "tree": "6d9385d0a4a2940631f67a938e89bcfe7a3b8cff",
      "parents": [
        "f8b0a6191085f55dc71f7a877c55dce0e4b6feb9"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 09:39:48 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Oct 28 09:39:48 2026"
      },
      "message": "Doc: restyle changelog headings, h2 separators, version notes and sponsors\n"
    },
    {
      "commit": "f8b0a6191085f55dc71f7a877c55dce0e4b6feb9",
      "tree": "41b0051b3c3f63b135ed85e8585e69a036a71f89",
      "parents": [
        "a1e3067965a075c40b79971cfda51501e80da685"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 25 11:32:43 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 25 11:32:43 2026"
      },
      "message": "README badge: fetch download stats from clickhouse.com\n"
    },
    {
      "commit": "a1e3067965a075c40b79971cfda51501e80da685",
      "tree": "23b985703dd9628e819e6823481d194492007eaa",
      "parents": [
        "d094fd6c9bfb9b66b2af63813734a8e63f9da36d"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Oct 22 22:02:19 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Oct 22 22:02:19 2026"
      },
      "message": "Linux: Process cmdline() and environ() turned \\r and \\r\\n into \\n (#3082)\n"
    },
    {
      "commit": "d094fd6c9bfb9b66b2af63813734a8e63f9da36d",
      "tree": "2b013391a24a70c6d265ff36e6cd091a3b85da1a",
      "parents": [
        "a625dc49c900f03283cf95d611aa3dbd8ae43b49"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Oct 20 15:02:03 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Oct 20 15:02:03 2026"
      },
      "message": "Tests / Win: attempt workaround for powersheel being super slow on ARM\n"
    },
    {
      "commit": "a625dc49c900f03283cf95d611aa3dbd8ae43b49",
      "tree": "ec75c6694164b1db5bb8a42b30f11f5ce434f358",
      "parents": [
        "b517fd61bfc43debdde2946e038e2d008b569d31"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Oct 20 09:56:12 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Oct 20 09:56:12 2026"
      },
      "message": "Rename \"UNIX\" platform label and tag to \"POSIX\"\n"
    },
    {
      "commit": "b517fd61bfc43debdde2946e038e2d008b569d31",
      "tree": "b222601e6e87eb29fb301f6887e7057998cd77ae",
      "parents": [
        "1107a5443ed9d973e320b37b14d35f4b325a8d48"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Oct 20 09:19:45 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Oct 20 09:19:45 2026"
      },
      "message": "Tests: try to fix osx flaky tests re. to memory\n"
    },
    {
      "commit": "1107a5443ed9d973e320b37b14d35f4b325a8d48",
      "tree": "d39bbb5bed5309a2a64d3205f3ca68ce5a757f63",
      "parents": [
        "1fdc17c58bc5fb52af3675dc83455d082470c853"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 22:22:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 22:22:52 2026"
      },
      "message": "Tests: fix tests that could never fail, remove dead and duplicate ones (#3078)\n\nA Claude Code review of the test suite, looking for tests that pass no\nmatter what psutil returns. Each fix was checked by breaking the code\nunder test and making sure the test now fails.\n\nFixed tests that couldn\u0027t fail:\n- open_files() checks compared a str against named tuples.\n- test_nice ran on the test process itself and left the whole run at\nnice 1. It now uses a child.\n- test_environ never asserted when run locally. It now compares against\na child\u0027s environment.\n- Linux mock tests (cpufreq fallback, /sys/block, IPv6 unsupported,\nbattery on machines without one) didn\u0027t reach the code they meant to\ntest.\n- test_exe swallowed path mismatches outside macOS; disk/net io_counters\ndict checks were always true; test_mmap_used had a zero-width tolerance;\ntest_pids on POSIX only compared counts.\n- The ifconfig based test_net_if_stats on BSD and macOS passed without\nchecking anything if ifconfig failed for every interface.\n\nRemoved dead code, commented-out tests, always-false skipifs, Vista/Win7\nleftovers, the unused kernel_version() helper, and tests that duplicate\nothers (test_parents_and_children, test_import_all, TestLoadAvg,\ntest_rlimit_infinity_value, a few net_connections() and Windows ones).\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "1fdc17c58bc5fb52af3675dc83455d082470c853",
      "tree": "f02cb0538ba7e59768637c9ac746a415362d8d9f",
      "parents": [
        "1cdbfd226bee9671c3de9f9c38eb4fa15a7ec797"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 20:51:34 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 20:51:34 2026"
      },
      "message": "Tests: various fixes (#3077)\n\nCo-authored-by: Claude Opus 5.5 \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "1cdbfd226bee9671c3de9f9c38eb4fa15a7ec797",
      "tree": "2dc5533fc68cb7b188a4de070f3ad89e66e8cdc5",
      "parents": [
        "1e20a76206b2acbcaf7ad5a9f4cec39e1a5ed722"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 20:11:03 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 20:15:19 2026"
      },
      "message": "Tests: split POSIX TestProcess into classes by API\n"
    },
    {
      "commit": "1e20a76206b2acbcaf7ad5a9f4cec39e1a5ed722",
      "tree": "a49eaefc9d1ed2e0e7b30f53d7f6396290ccd361",
      "parents": [
        "e0d71436daeee44f152c6f0f078f95b1bc6c859a"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 20:08:56 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 20:08:56 2026"
      },
      "message": "Tests: split Windows TestProcess into classes by API\n"
    },
    {
      "commit": "e0d71436daeee44f152c6f0f078f95b1bc6c859a",
      "tree": "cd0657f81b23edd04a377ca6c259da98caf49f0e",
      "parents": [
        "5a99eba4bdded090db4f88ed533cc9cf94479431"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 20:03:05 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 20:03:05 2026"
      },
      "message": "Tests: split AIX and SunOS test classes by API\n"
    },
    {
      "commit": "5a99eba4bdded090db4f88ed533cc9cf94479431",
      "tree": "fe4dba8fb229012a72283b11c01945e1a8d7fde5",
      "parents": [
        "1bfffa212facb91001f432ebe3b00c67ad89558d"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 20:03:05 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 20:03:05 2026"
      },
      "message": "Tests: add BSD base test classes and rename BSD classes\n"
    },
    {
      "commit": "1bfffa212facb91001f432ebe3b00c67ad89558d",
      "tree": "4035cd4839d979e7c9ca955d2768ad7867e6a54e",
      "parents": [
        "f676e7cb44a00d1285f692b19437c50e6b950b50"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 19:56:27 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 19:56:27 2026"
      },
      "message": "Tests: move tests in the right class\n"
    },
    {
      "commit": "f676e7cb44a00d1285f692b19437c50e6b950b50",
      "tree": "db99ad5796f5d4fc7c88308fae6796e8ead52c2a",
      "parents": [
        "9859a1b1763c090d541e62a0d223c832be588ab8"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 19:43:46 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 19:43:46 2026"
      },
      "message": "Tests: remove dead code\n"
    },
    {
      "commit": "9859a1b1763c090d541e62a0d223c832be588ab8",
      "tree": "fbf52a1920a11cd79186b975ad8f1eae6c0b97ac",
      "parents": [
        "b30426177566fc58ee310a9507ac91b28256f678"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 19:21:14 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 19:21:14 2026"
      },
      "message": "Tests: fix various tests inaccuracies found by Claude\n"
    },
    {
      "commit": "b30426177566fc58ee310a9507ac91b28256f678",
      "tree": "504dc5f81ad0c587d876f422cb8c83b5e3dda82c",
      "parents": [
        "1b62e336993d8aacc836812cc75f1a01edae1e03"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:45:06 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:45:06 2026"
      },
      "message": "Tests: use check() in TestSerialization.test_exceptions\n"
    },
    {
      "commit": "1b62e336993d8aacc836812cc75f1a01edae1e03",
      "tree": "475013165bf8e830067f90e3f7177cc8dd6bded5",
      "parents": [
        "9fae74d938205031d8f71a7805bf3435b5b88eb3"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:43:54 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:43:54 2026"
      },
      "message": "Tests: dedupe socket setup and checks in test_connections.py\n"
    },
    {
      "commit": "9fae74d938205031d8f71a7805bf3435b5b88eb3",
      "tree": "4da40dfd552c991664958830d5751f9f88e0d8e2",
      "parents": [
        "bcb52c7af0edfeb5b38028d39ed71b7e5541dd00"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:37:04 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:37:04 2026"
      },
      "message": "Tests: use skip_on_access_denied() for OpenBSD in TestProcessThreads\n"
    },
    {
      "commit": "bcb52c7af0edfeb5b38028d39ed71b7e5541dd00",
      "tree": "1578749bc6ee9aed71c69f48795bf581db7640f8",
      "parents": [
        "7492edd695727900497519e313611ddfad53bd45"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:34:16 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:34:16 2026"
      },
      "message": "Tests: add popen() helper in TestPopen\n"
    },
    {
      "commit": "7492edd695727900497519e313611ddfad53bd45",
      "tree": "7fb65c88f2ef5bc23ac97cc1f575ed445dbfe455",
      "parents": [
        "cf39d7f66b762c9ba3ccaf50f1620530f3190f75"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:33:30 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:33:30 2026"
      },
      "message": "Tests: share proc() factory in TestProcessPidReuse\n"
    },
    {
      "commit": "cf39d7f66b762c9ba3ccaf50f1620530f3190f75",
      "tree": "df04c782733ccce6ac249e0d12b7167bde1928c4",
      "parents": [
        "06537dd669977dd823125e415b1eed519240d4a3"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:30:16 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:30:16 2026"
      },
      "message": "Tests: add check_children() helper in TestProcessTree\n"
    },
    {
      "commit": "06537dd669977dd823125e415b1eed519240d4a3",
      "tree": "439479212578c90eb2e50cda925c021693c2ad7c",
      "parents": [
        "a11f599bf8aa1d2252283fa8518f666c7e6c5af8"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:29:38 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:29:38 2026"
      },
      "message": "Tests: table-drive test_wait_exited\n"
    },
    {
      "commit": "a11f599bf8aa1d2252283fa8518f666c7e6c5af8",
      "tree": "b290ff6364ceeb54a5f38ba9efb7c77bbccd6b77",
      "parents": [
        "a07686c256abcde44d85a4d2f08d98cf7dd31353"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:27:12 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:27:12 2026"
      },
      "message": "Tests: add check_killed_by() helper in TestProcessSignals\n"
    },
    {
      "commit": "a07686c256abcde44d85a4d2f08d98cf7dd31353",
      "tree": "84dd9db5277ba61a88169837406a281ff24977ec",
      "parents": [
        "d13e0f45bf0d365d37d830e640e960790433c14b"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:25:21 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:25:21 2026"
      },
      "message": "Tests: add check_cmdline() helper on Linux\n"
    },
    {
      "commit": "d13e0f45bf0d365d37d830e640e960790433c14b",
      "tree": "d49a693528122a42ecca529a8f8497831e630a31",
      "parents": [
        "162974a603abd49c6137291920166b41354c9a18"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:24:18 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:24:18 2026"
      },
      "message": "Tests: add emulate_diskstats() helper on Linux\n"
    },
    {
      "commit": "162974a603abd49c6137291920166b41354c9a18",
      "tree": "ee4b8ae35187f048c336b9b921e6bd6709576616",
      "parents": [
        "43df7057a16a9ef1b2d046b433490041bd7d6bee"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:23:02 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:23:02 2026"
      },
      "message": "Tests: dedupe meminfo mocks in TestVirtualMemoryMocks\n"
    },
    {
      "commit": "43df7057a16a9ef1b2d046b433490041bd7d6bee",
      "tree": "fdb3c9a4e10afc87e06b12aadd61da691853015e",
      "parents": [
        "64c1a49691c624022a7b1a85f04077f6b7dd2085"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:20:04 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:20:04 2026"
      },
      "message": "Tests: add check_vmstat() helper on Linux\n"
    },
    {
      "commit": "64c1a49691c624022a7b1a85f04077f6b7dd2085",
      "tree": "9e7949ed1ca2ce4df1d92b6a3f0ebe078d4233f6",
      "parents": [
        "70fb740898a84ed2018c31045c78a4bd645f3388"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:18:39 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:18:39 2026"
      },
      "message": "Tests: add mock_cpufreq_sysfs() and make cpufreq tests host independent\n"
    },
    {
      "commit": "70fb740898a84ed2018c31045c78a4bd645f3388",
      "tree": "6050005890cf7f8758971ec0057ce0acdd0067ca",
      "parents": [
        "4c9f0a8bbb0248fb62aae082cc90e41f39378d95",
        "839091d7f8358aaf9bd17b1b7043043d265fe9cc"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:13:32 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:13:32 2026"
      },
      "message": "Merge branch \u0027master\u0027 into tests-dedup-bodies\n"
    },
    {
      "commit": "839091d7f8358aaf9bd17b1b7043043d265fe9cc",
      "tree": "c5b821482312be081680132ed1fccf216e61958c",
      "parents": [
        "b546bf65bd5c31a1f0cb79ba5ddf078cc78180eb"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:08:22 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 18:08:22 2026"
      },
      "message": "[OpenBSD] Process.cwd() raises OSError(EINVAL) for an exiting process\n"
    },
    {
      "commit": "b546bf65bd5c31a1f0cb79ba5ddf078cc78180eb",
      "tree": "0b0dbab1b8a8062f08f8c64eb6c17802799f275e",
      "parents": [
        "136430d74741eda562575911055db0aa2b6b3fb4"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 17:42:05 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 17:42:05 2026"
      },
      "message": "Fix compilation on Python 3.15 with the limited API\n"
    },
    {
      "commit": "4c9f0a8bbb0248fb62aae082cc90e41f39378d95",
      "tree": "776a98cccf819e52d6efca455dadf28b260754ff",
      "parents": [
        "136430d74741eda562575911055db0aa2b6b3fb4"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 17:24:09 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 17:24:09 2026"
      },
      "message": "Tests: replace hand-rolled open() mocks with mock_open_content() on Linux\n"
    },
    {
      "commit": "136430d74741eda562575911055db0aa2b6b3fb4",
      "tree": "90fda6acfc977af4a5d15edff7f6ce569d285451",
      "parents": [
        "15540381ad0438541c8a933246713bb2822431e2"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 17:17:40 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 17:17:40 2026"
      },
      "message": "Tests: assert_ntuple_of_nums()\n"
    },
    {
      "commit": "15540381ad0438541c8a933246713bb2822431e2",
      "tree": "11b02a279ca6d699f6abcfbf6f3daf021e56ce18",
      "parents": [
        "a19d562ddae6823fd6341599a88f0aee04640dee"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 17:12:30 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 17:12:30 2026"
      },
      "message": "Tests: dedupe PYTHON_SLEEP_CODE\n"
    },
    {
      "commit": "a19d562ddae6823fd6341599a88f0aee04640dee",
      "tree": "bddd7e674e93955d04b7a4e48aeb07fe8219fb2a",
      "parents": [
        "cdb21d83826462abc1ae8c1bd443f0c6936bd0bd"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 17:09:21 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 17:09:21 2026"
      },
      "message": "Tests: dedupe vmstat cmd on BSD\n"
    },
    {
      "commit": "cdb21d83826462abc1ae8c1bd443f0c6936bd0bd",
      "tree": "92525ef64460404e5619bf785c2b797968f9fab1",
      "parents": [
        "b7753a580adb9099817a3f0b38b1275bd2f1f688"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 17:07:52 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 17:07:52 2026"
      },
      "message": "Tests: dedupe df and sysctl commands on POSIX\n"
    },
    {
      "commit": "b7753a580adb9099817a3f0b38b1275bd2f1f688",
      "tree": "36af549feccc100cca475737e9801cf3d2626ee5",
      "parents": [
        "7f28cfcdffa12263d5fa449d0a0fe8590f4e3c3e"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 15:04:54 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 15:04:54 2026"
      },
      "message": "Update changelog.rst\n"
    },
    {
      "commit": "7f28cfcdffa12263d5fa449d0a0fe8590f4e3c3e",
      "tree": "684b330a1ce332f53e7e57669c7763135ac46f63",
      "parents": [
        "8efcff6bd171adea17bdb0bb05366233b4ad613d"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 14:48:11 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 14:48:11 2026"
      },
      "message": "Doc: refresh adoption stats\n"
    },
    {
      "commit": "8efcff6bd171adea17bdb0bb05366233b4ad613d",
      "tree": "4f88ab325770c6ef7bf8ba52ae7fe9561c09df16",
      "parents": [
        "3d135963fd82733fac76e0c3aa28c88fce332e7b"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 12:56:27 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 12:56:27 2026"
      },
      "message": "Tests: move heap tests in TestHeapAPIs\n"
    },
    {
      "commit": "3d135963fd82733fac76e0c3aa28c88fce332e7b",
      "tree": "edd2f0f20ca547598c4b84a3d715ca32b9c7cebf",
      "parents": [
        "4f2bde2c554269a0295e58e1c2570060ae0c144e",
        "a2eb6df3e49204226d48346df234d13177e5dfe8"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 12:02:40 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 12:02:40 2026"
      },
      "message": "Tests: split FreeBSDSystemTestCase into classes following the API overview\n"
    },
    {
      "commit": "4f2bde2c554269a0295e58e1c2570060ae0c144e",
      "tree": "16ae7d49d5b14593da9f0d048559dfa632d37516",
      "parents": [
        "e36784dead12c3368e5399e9781b5b20a3db076d"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 12:02:40 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 12:02:40 2026"
      },
      "message": "Tests: split FreeBSDSystemTestCase (step 1/2)\n"
    },
    {
      "commit": "a2eb6df3e49204226d48346df234d13177e5dfe8",
      "tree": "65ecd25ae21badd45a6bade6c0502dd688ccc263",
      "parents": [
        "e36784dead12c3368e5399e9781b5b20a3db076d"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 12:02:40 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 12:02:40 2026"
      },
      "message": "Tests: split FreeBSDSystemTestCase (step 2/2)\n"
    },
    {
      "commit": "e36784dead12c3368e5399e9781b5b20a3db076d",
      "tree": "f536deffaada204a173c2945328a0c4e16af546d",
      "parents": [
        "b617367a0a104931b33e858cc47cdf26caa46a97",
        "6bf696922e11d1e27ea9fad84eb3cda2bc66de0f"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:58:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 11:58:17 2026"
      },
      "message": "Merge pull request #3069 from giampaolo/tests-split-linux-process\n\nTests: split linux process tests"
    },
    {
      "commit": "6bf696922e11d1e27ea9fad84eb3cda2bc66de0f",
      "tree": "f536deffaada204a173c2945328a0c4e16af546d",
      "parents": [
        "bd3c5ded2ffed63e2376cbe539fef23aafa53f0a",
        "b28c6f7bd5c5a74217d84cdb2751268e6324c7f3",
        "21d73a45edaa07b21a7eede536633c7a5d477c57",
        "b9d8723847ab96486e9db54e0fe0e92c3a4734df",
        "4567046e4f110b5ecb401d10b82d3c80ba715332"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:54:47 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:54:47 2026"
      },
      "message": "Tests: split Linux TestProcess into classes following the API overview\n"
    },
    {
      "commit": "bd3c5ded2ffed63e2376cbe539fef23aafa53f0a",
      "tree": "0deaca34911380c7a7acf1070eeff6fe5aec105d",
      "parents": [
        "b617367a0a104931b33e858cc47cdf26caa46a97"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:54:47 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:54:47 2026"
      },
      "message": "Tests: split Linux TestProcess (step 1/5)\n"
    },
    {
      "commit": "b28c6f7bd5c5a74217d84cdb2751268e6324c7f3",
      "tree": "6b4d4e3f2a2395cb7e6ca58e3e1739fb5c164f72",
      "parents": [
        "b617367a0a104931b33e858cc47cdf26caa46a97"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:54:47 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:54:47 2026"
      },
      "message": "Tests: split Linux TestProcess (step 2/5)\n"
    },
    {
      "commit": "21d73a45edaa07b21a7eede536633c7a5d477c57",
      "tree": "9457c8fdc0d85edc5bd6e3eae991812b433b7a1f",
      "parents": [
        "b617367a0a104931b33e858cc47cdf26caa46a97"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:54:47 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:54:47 2026"
      },
      "message": "Tests: split Linux TestProcess (step 3/5)\n"
    },
    {
      "commit": "b9d8723847ab96486e9db54e0fe0e92c3a4734df",
      "tree": "119fec0bcd957d9ec4dfb4048264f1d5c4d12873",
      "parents": [
        "b617367a0a104931b33e858cc47cdf26caa46a97"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:54:47 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:54:47 2026"
      },
      "message": "Tests: split Linux TestProcess (step 4/5)\n"
    },
    {
      "commit": "4567046e4f110b5ecb401d10b82d3c80ba715332",
      "tree": "4c5762b02930b61010322f96dd5aaf4ad3c25591",
      "parents": [
        "b617367a0a104931b33e858cc47cdf26caa46a97"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:54:47 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:54:47 2026"
      },
      "message": "Tests: split Linux TestProcess (step 5/5)\n"
    },
    {
      "commit": "b617367a0a104931b33e858cc47cdf26caa46a97",
      "tree": "be3ad0ae00ea06a0eb9dbcfacbf31bb4ec304334",
      "parents": [
        "f51fc578d39812ea518a4c58639445f46eb9825b",
        "7189fc407bca282dcef7b138b6e44536aa6c9f33"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:49:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 11:49:57 2026"
      },
      "message": "Merge pull request #3068 from giampaolo/tests-split-process-class\n\nTests: split Process class tests"
    },
    {
      "commit": "7189fc407bca282dcef7b138b6e44536aa6c9f33",
      "tree": "be3ad0ae00ea06a0eb9dbcfacbf31bb4ec304334",
      "parents": [
        "35d83bb9dd06effb5637d5716d8bf0f6a13c4270",
        "2b04a0c6c8924c7d47492b25fa4c54eabb26293d",
        "8fb9c18e9028688c4f939560fb67838ad43f6b94",
        "e26350fa8fa17d1066937a3647da6d00074d79fb",
        "0a088c87dc2417788ac01f137c098a84641ff17e",
        "07b6e3ac6aae3de38acc0e9d19b824ad6ed234c4",
        "52bd391fa2e8916a70ee94e296398d0097a253bc",
        "9ea01f3211323e7b1868211042e3df6d1d296a37",
        "7f65b31bba82e0a193ae421531dddf6186911703"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "message": "Tests: split TestProcess into classes following the API overview\n"
    },
    {
      "commit": "35d83bb9dd06effb5637d5716d8bf0f6a13c4270",
      "tree": "e7cc7e60c044f725608fe888b6274c5641f04579",
      "parents": [
        "f51fc578d39812ea518a4c58639445f46eb9825b"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "message": "Tests: split TestProcess (step 1/9)\n"
    },
    {
      "commit": "2b04a0c6c8924c7d47492b25fa4c54eabb26293d",
      "tree": "af8316cc2616a7a71b4c49a219c20a04a55a23ff",
      "parents": [
        "f51fc578d39812ea518a4c58639445f46eb9825b"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "message": "Tests: split TestProcess (step 2/9)\n"
    },
    {
      "commit": "8fb9c18e9028688c4f939560fb67838ad43f6b94",
      "tree": "c2be250c9615c6c7a8f037e01b9113bf9c0c3141",
      "parents": [
        "f51fc578d39812ea518a4c58639445f46eb9825b"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "message": "Tests: split TestProcess (step 3/9)\n"
    },
    {
      "commit": "e26350fa8fa17d1066937a3647da6d00074d79fb",
      "tree": "4ab53385123d7958908222bf37d0e38ad1775cf4",
      "parents": [
        "f51fc578d39812ea518a4c58639445f46eb9825b"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "message": "Tests: split TestProcess (step 4/9)\n"
    },
    {
      "commit": "0a088c87dc2417788ac01f137c098a84641ff17e",
      "tree": "357de80f1256e1d187779b4cf28529b77c2f8fe8",
      "parents": [
        "f51fc578d39812ea518a4c58639445f46eb9825b"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "message": "Tests: split TestProcess (step 5/9)\n"
    },
    {
      "commit": "07b6e3ac6aae3de38acc0e9d19b824ad6ed234c4",
      "tree": "df239a38ae77b67274b0fb65f841f1a29820f91e",
      "parents": [
        "f51fc578d39812ea518a4c58639445f46eb9825b"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "message": "Tests: split TestProcess (step 6/9)\n"
    },
    {
      "commit": "52bd391fa2e8916a70ee94e296398d0097a253bc",
      "tree": "ae92e296d1bd5f83c304f4ce745635627ea57134",
      "parents": [
        "f51fc578d39812ea518a4c58639445f46eb9825b"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "message": "Tests: split TestProcess (step 7/9)\n"
    },
    {
      "commit": "9ea01f3211323e7b1868211042e3df6d1d296a37",
      "tree": "b30a3abdbfe56c82cef7f2c9e531200e4322372d",
      "parents": [
        "f51fc578d39812ea518a4c58639445f46eb9825b"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "message": "Tests: split TestProcess (step 8/9)\n"
    },
    {
      "commit": "7f65b31bba82e0a193ae421531dddf6186911703",
      "tree": "775a5a823785be98f80fd268fd34d33b7eadf72b",
      "parents": [
        "f51fc578d39812ea518a4c58639445f46eb9825b"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Oct 19 11:45:21 2026"
      },
      "message": "Tests: split TestProcess (step 9/9)\n"
    },
    {
      "commit": "f51fc578d39812ea518a4c58639445f46eb9825b",
      "tree": "ade210862598fbe529084f30a56b8c89945d7cca",
      "parents": [
        "ebec52254c5ecb192b57ccd1307fa1764f2b5ec1"
      ],
      "author": {
        "name": "Pooyan",
        "email": "pooyan.azadparvar@gmail.com",
        "time": "Mon Oct 19 09:41:09 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 19 09:41:09 2026"
      },
      "message": "Tests: compare users against utmp-backed who (#3008)"
    },
    {
      "commit": "ebec52254c5ecb192b57ccd1307fa1764f2b5ec1",
      "tree": "64331f9a82c0c5c97b12e9dffabcd03a1c40b8ce",
      "parents": [
        "dc1af2a8b7141bb21a78c3bebb6c8974eb6a9d02"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 23:51:20 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 23:51:20 2026"
      },
      "message": "Let gcc/clang check str_format() args; don\u0027t pass error messages as format strings\n"
    },
    {
      "commit": "dc1af2a8b7141bb21a78c3bebb6c8974eb6a9d02",
      "tree": "81b15b04f881956bc42184dcfd6fe428987d9c6b",
      "parents": [
        "180f41d355016dd740e1c3ad2f936518468138a1"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 23:29:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Oct 18 23:29:49 2026"
      },
      "message": "Enable C compiler warnings on all platforms, make them fatal in CI (#3066)\n\nsetup.py now builds the C extension with `-Wall -Wextra` (`/W4` on\nWindows) on every platform.\nThe Makefile sets `PSUTIL_WERROR\u003d1` on build, which turns warnings into\nerrors, so CI fails on any new warning, while a plain `pip install` from\nsource only prints them."
    },
    {
      "commit": "180f41d355016dd740e1c3ad2f936518468138a1",
      "tree": "4c68b3ff20a239d146447fde7be9fe1bef903f25",
      "parents": [
        "529f28a48a5ac1cb08c015e326d3c81d7f8a151e"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 21:59:31 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 21:59:31 2026"
      },
      "message": "NetBSD: net_connections() read freed memory when clearing its result lists; unlink each node before freeing it\n"
    },
    {
      "commit": "529f28a48a5ac1cb08c015e326d3c81d7f8a151e",
      "tree": "08e60d36d105e1d1420d04e68b8b3f3902974105",
      "parents": [
        "0e13019a2144b9b65913b6bfa39e7dfac05d5475"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 21:56:48 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 21:56:48 2026"
      },
      "message": "SunOS: cmdline()/environ() ignored pread() failures; the byte count was unsigned so the \u003c 0 check never matched\n"
    },
    {
      "commit": "0e13019a2144b9b65913b6bfa39e7dfac05d5475",
      "tree": "80598f84174055c43115a9ce008ec4a489f97558",
      "parents": [
        "346fa4e96c88c78dbf94c20556ee6a09c026253c"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 21:54:28 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 21:54:28 2026"
      },
      "message": "SunOS: Process.memory_maps() read past a heap buffer if pread() failed; the -1 return was stored as size_t\n"
    },
    {
      "commit": "346fa4e96c88c78dbf94c20556ee6a09c026253c",
      "tree": "3c542051206b8429f0d1fac6a5216ff326a3ee38",
      "parents": [
        "e32869e290a2be23fce5776399fdb78c2b198d54"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 21:46:58 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 21:46:58 2026"
      },
      "message": "SunOS: Process.terminal() returned fd 0\u0027s path instead of None for processes without a tty; PRNODEV was never matched because pr_ttydev was exported unsigned\n"
    },
    {
      "commit": "e32869e290a2be23fce5776399fdb78c2b198d54",
      "tree": "d367e527a1c872802e286deb0e6d8dda8fa28e3c",
      "parents": [
        "319da0dca60269d294c5133293fc93b2dc3edb27"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 21:40:32 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 21:40:32 2026"
      },
      "message": "OpenBSD: users() read past the end of utmp fields which fill the whole array (no null terminator)\n"
    },
    {
      "commit": "319da0dca60269d294c5133293fc93b2dc3edb27",
      "tree": "640c9788d282cb9ef5344dde604fe0cfc277046d",
      "parents": [
        "a17582bc76ae50896699fa26f19b7272c9d96d08"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 21:39:07 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 21:39:07 2026"
      },
      "message": "OpenBSD: users() called fclose(NULL) if /var/run/utmp could not be opened\n"
    },
    {
      "commit": "a17582bc76ae50896699fa26f19b7272c9d96d08",
      "tree": "85ea68bff55fba000fcc453b17edc09b9ba36d99",
      "parents": [
        "379dc2ced52cd73908a5f89fb7d9f7d671441236"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 21:39:06 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 21:39:06 2026"
      },
      "message": "POSIX: net_if_addrs() freed an uninitialized pointer if getifaddrs() failed\n"
    },
    {
      "commit": "379dc2ced52cd73908a5f89fb7d9f7d671441236",
      "tree": "de2dc2381802a5eb4edbc8869903568ddf2856fa",
      "parents": [
        "8cb5bfdd54f98a310cc0b6806f39ea2e3a648f0f"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 21:14:53 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 21:14:53 2026"
      },
      "message": "Linux: disk_partitions() mountinfo fallback (#2611) returned pseudo filesystems with all\u003dFalse; keep only device-backed fstypes, like /proc/filesystems\u0027 nodev flag\n"
    },
    {
      "commit": "8cb5bfdd54f98a310cc0b6806f39ea2e3a648f0f",
      "tree": "3813044733709ca42ec7178295cfee46c3f37297",
      "parents": [
        "49c9bcac39f5e01757093daa8a351688d3dd69f6"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 20:58:56 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 20:58:56 2026"
      },
      "message": "Update changelog.rst\n"
    },
    {
      "commit": "49c9bcac39f5e01757093daa8a351688d3dd69f6",
      "tree": "0d0cc2fff4a5d45e98fe871a16ec0e35a2934923",
      "parents": [
        "e6bece7d2bbbff864ef55b385d7e16507e0dd268"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 20:52:56 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 20:52:56 2026"
      },
      "message": "Windows / C: remove double declaration of MIB_TCP_STATE_TIME_WAIT\n"
    },
    {
      "commit": "e6bece7d2bbbff864ef55b385d7e16507e0dd268",
      "tree": "b8eba273a7f0adde94870a286bfce47465459009",
      "parents": [
        "9b7a5d82afa50b0368b3fcf44bf32cc5ebb7f754"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 20:48:49 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 20:48:49 2026"
      },
      "message": "Adjust changelog entry about open_files() on windows\n"
    },
    {
      "commit": "9b7a5d82afa50b0368b3fcf44bf32cc5ebb7f754",
      "tree": "c25aee53a49df1d6503555252407723b91ba87e0",
      "parents": [
        "b363a77df0ad40111305fea4f7da3c3260554e52"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 20:45:33 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 20:45:33 2026"
      },
      "message": "Windows: pmem.__getattr__ raised KeyError instead of AttributeError on instances created via _replace() / _make(), breaking hasattr() and getattr() defaults\n"
    },
    {
      "commit": "b363a77df0ad40111305fea4f7da3c3260554e52",
      "tree": "dca97ce0a8f5f28966cba8761564c56fb5db7bc4",
      "parents": [
        "e945b2bf0ebb0c762d005c1ced5db696f8423b31"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 20:42:41 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 20:42:41 2026"
      },
      "message": "Linux: memory_full_info() raised TypeError instead of falling back to memory_info() on kernels without /proc/pid/smaps\n"
    },
    {
      "commit": "e945b2bf0ebb0c762d005c1ced5db696f8423b31",
      "tree": "3fb549c4f6c53633781d14300f758b5ec728869a",
      "parents": [
        "0343517ddbac20ecc1db4f5c5dd0fa7f0f780044"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 20:39:58 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 20:39:58 2026"
      },
      "message": "FreeBSD: cpu_count_cores() returned None with an OSError pending (SystemError) if kern.smp.cores is unavailable, regressed in #2782\n"
    },
    {
      "commit": "0343517ddbac20ecc1db4f5c5dd0fa7f0f780044",
      "tree": "9b592ed8cbe1016c5ae0868c2195273a08a3e6e3",
      "parents": [
        "602611cee5b053cca85e60b09d466105d95fa368"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 20:38:48 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 20:38:48 2026"
      },
      "message": "SunOS: restore CONN_BOUND / CONN_IDLE string values (\"BOUND\", \"IDLE\"), accidentally changed when moving them to _enums.py\n"
    },
    {
      "commit": "602611cee5b053cca85e60b09d466105d95fa368",
      "tree": "da11429369896c4e32ca65e89e79fe8b85dc23cd",
      "parents": [
        "bcacff554f96d1a7d768e1d7ee9605421033bb65"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 20:36:44 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Oct 18 20:36:44 2026"
      },
      "message": "NetBSD, OpenBSD: fix double free() in swap_memory() error path, regressed after #2744 when merging into bsd/mem.c\n"
    }
  ],
  "next": "bcacff554f96d1a7d768e1d7ee9605421033bb65"
}
