)]}'
{
  "log": [
    {
      "commit": "127840daad0b474065ed42583f8db4f80ecfa033",
      "tree": "eb55bad9c8bdffa64756401291b354780c44dc42",
      "parents": [
        "1a2569db0b2ad7489539ad6b6b6b85cb13b755f7"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun May 31 15:17:27 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun May 31 15:17:27 2026"
      },
      "message": "Fix RCE in changelog_bot workflow\n\nThe changelog-bot workflow checked out the PR head and executed\n.github/workflows/changelog_bot.py straight from that untrusted\ncheckout. Although only a trusted commenter can trigger the job, the\nexecuted code came from the PR branch, so an attacker could open a\nbenign PR, wait for the /changelog comment, and swap in a malicious\nchangelog_bot.py via a TOCTOU race on the mutable PR head. The result\nwas arbitrary code execution on the runner with access to GITHUB_TOKEN\nand ANTHROPIC_API_KEY.\n\nRun the trusted changelog_bot.py from master (extracted via git show)\ninstead of the PR\u0027s copy, so untrusted code is never executed. Also\npin the checkout to the PR head SHA resolved in the Get PR info step,\nsince github.event.pull_request is null on issue_comment events.\n\nReported via Depi, validated by Garance de la Brosse (Lupin \u0026 Holmes).\n\nCo-Authored-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "1a2569db0b2ad7489539ad6b6b6b85cb13b755f7",
      "tree": "f3dbeb0e42f449deaa82438c89622be182d843c5",
      "parents": [
        "ed9afa132a124283b78a1d5bf8f221022b5e21b8"
      ],
      "author": {
        "name": "Tobias Klauser",
        "email": "tklauser@distanz.ch",
        "time": "Thu May 21 13:01:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 13:01:49 2026"
      },
      "message": "Fix broadcast address being discarded in `net_if_addrs` on Windows (#2836)\n\nPatch by Tobias Klauser. "
    },
    {
      "commit": "ed9afa132a124283b78a1d5bf8f221022b5e21b8",
      "tree": "6d38bf19c8a048a19973e1197b12ebc22ddf37a5",
      "parents": [
        "5d2762a9005c3a231d95028e6a4298a4ab90f1d1"
      ],
      "author": {
        "name": "Tobias Klauser",
        "email": "tobias.klauser@gmail.com",
        "time": "Wed May 20 22:32:55 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 20 22:32:55 2026"
      },
      "message": "Credit correct user (#2835)"
    },
    {
      "commit": "5d2762a9005c3a231d95028e6a4298a4ab90f1d1",
      "tree": "569d6749ea342596836c1e85f48d9f2422b98b97",
      "parents": [
        "cba7802e9935e6252f6c8264f96217ec80fd973a"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri May 08 12:07:09 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri May 08 12:07:09 2026"
      },
      "message": "CSS style + remove hyphen from HTML title\n"
    },
    {
      "commit": "cba7802e9935e6252f6c8264f96217ec80fd973a",
      "tree": "452565eab787e19a740631e00150f9208566f9f4",
      "parents": [
        "95ae5378ad1c60d040bf2f0fcb32f1d9e298c2f6",
        "79b5e67787fdbe58a5eecef7551309a61d48de01"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri May 08 00:38:37 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri May 08 00:38:37 2026"
      },
      "message": "Merge branch \u0027master\u0027 of github.com:giampaolo/psutil\n"
    },
    {
      "commit": "95ae5378ad1c60d040bf2f0fcb32f1d9e298c2f6",
      "tree": "452565eab787e19a740631e00150f9208566f9f4",
      "parents": [
        "81b45fd0fe37f2c3f084aa25e367b9079a342143"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri May 08 00:38:26 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri May 08 00:38:26 2026"
      },
      "message": "Add sphinx_design dep\n\nSigned-off-by: Giampaolo Rodola \u003cg.rodola@gmail.com\u003e\n"
    },
    {
      "commit": "79b5e67787fdbe58a5eecef7551309a61d48de01",
      "tree": "d2c62b32531661240041210e8283bf83f2ede5f7",
      "parents": [
        "81b45fd0fe37f2c3f084aa25e367b9079a342143"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri May 08 00:30:05 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri May 08 00:30:05 2026"
      },
      "message": "Doc: improve home (install tip, dynamic examples)\n"
    },
    {
      "commit": "81b45fd0fe37f2c3f084aa25e367b9079a342143",
      "tree": "ead444f533ce279e6f11fddfb214ae8a81d4c905",
      "parents": [
        "cff769002524b2fa3aba8bcfb19737f2d5531135"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu May 07 21:50:40 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu May 07 21:50:40 2026"
      },
      "message": "Doc: improve home (install tip, dynamic examples)\n"
    },
    {
      "commit": "cff769002524b2fa3aba8bcfb19737f2d5531135",
      "tree": "9db41679ea9994e971c137459264fcff4494f8a3",
      "parents": [
        "e165f87c6f56a82110a3d4cde6320fce6367a6c7"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed May 06 22:21:06 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed May 06 22:21:06 2026"
      },
      "message": "Doc: dynamical refresh of adoption stats + fix site for mobile\n"
    },
    {
      "commit": "e165f87c6f56a82110a3d4cde6320fce6367a6c7",
      "tree": "d24420880cdc38cc93ce4b2203a5863a229e652f",
      "parents": [
        "2bfa3b4cafd592fff8b04f70ea19fc9572f17cd6"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue May 05 22:41:48 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue May 05 22:41:48 2026"
      },
      "message": "Doc: cross-reference roles + assorted polish\n\nThe bulk: replace one-off named-link targets and explicit hyperlinks\nwith reusable extlinks. New roles: :user:, :commit:, :pypi:, :bpo:,\n:cpy:, :cpy-pr:, :src:. Plus a custom :proc: role for /proc/\u003cfile\u003e\npaths. :manpage: wired to manpages.debian.org.\nChangelog backfilled with clickable contributor attributions.\n\nOther:\n- .readthedocs.yaml: fail_on_warning matches local Makefile flag.\n- Footer \"Updated:\" date links to the file\u0027s GitHub commit history.\n- _ext/proc_role.py: new local extension.\n- changelog_bot.py: emits :user:`Name \u003chandle\u003e` for new entries.\n- _globals.rst removed; rst_prolog inlined in conf.py.\n- code blocks: disable JetBrains Mono programming ligatures.\n- wide-table: opt out of global fixed-column layout (no more\n  monospace cells overflowing into the next column).\n- rst_unused_targets.py: scan repo-wide for \"used\" refs even when\n  called with a subset (fixes pre-commit false positives).\n- install.rst: add uv add psutil alongside pip install psutil.\n- layout.html: GoatCounter analytics alongside GA4.\n"
    },
    {
      "commit": "2bfa3b4cafd592fff8b04f70ea19fc9572f17cd6",
      "tree": "3173a3f77b4d4e9e450555af68fda7770d7110fc",
      "parents": [
        "cff1b1c5d21fa200222242d66d5d473cb3494dba"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat May 02 00:12:16 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 02 00:12:16 2026"
      },
      "message": "Doc: custom 404 page + easter egg (#2829)\n\nDoc now provides a custom 404 page. In the footer, hovering over the ©\ncopyright reveals an easter egg. Clicking it takes you to the 404 page\ncontaining a joke."
    },
    {
      "commit": "cff1b1c5d21fa200222242d66d5d473cb3494dba",
      "tree": "797f004841a6c923fc21808011cb05f60c162f55",
      "parents": [
        "d53c708117d561311e97ad294474bbf971d07c3d"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri May 01 23:59:17 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri May 01 23:59:17 2026"
      },
      "message": "Blog \u0026 site cleanups\n\n* Blog OpenGraph: classify posts as og:type\u003d\"article\", use post\n  summary (not first paragraph) for og:description, drop the\n  shared site-wide image (custom Sphinx ext under\n  docs/_ext/opengraph_override.py).\n* Blog feed: force UTC in atom feed; use canonical URLs.\n* Blog tag pages: show the tag in different color.\n* Blog index: render an h1.\n* Layout: hide RTD version and language selectors.\n* Tests: extend docs tests (regression coverage for blog index\n  metadata, OG, tags).\n"
    },
    {
      "commit": "d53c708117d561311e97ad294474bbf971d07c3d",
      "tree": "d108fbd60fc9d24e1e5427ed4a112e1d41e3c74c",
      "parents": [
        "36c677a95890ca4ecbd614c83f6ab851b58a85e5",
        "571ee2854df9b97fdae79313e04c7708780526d1"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri May 01 17:42:21 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri May 01 17:42:21 2026"
      },
      "message": "Merge branch \u0027github-stars\u0027\n"
    },
    {
      "commit": "571ee2854df9b97fdae79313e04c7708780526d1",
      "tree": "d108fbd60fc9d24e1e5427ed4a112e1d41e3c74c",
      "parents": [
        "368cc61eec39e3ce3ed59f6357a4e4ce7a0b3acd"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri May 01 17:42:09 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri May 01 17:42:09 2026"
      },
      "message": "Add github stars + versions in the topbar\n"
    },
    {
      "commit": "36c677a95890ca4ecbd614c83f6ab851b58a85e5",
      "tree": "3c4e8dba2cfa713079729c321da4bebcae2852e7",
      "parents": [
        "368cc61eec39e3ce3ed59f6357a4e4ce7a0b3acd"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri May 01 16:53:03 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri May 01 16:53:03 2026"
      },
      "message": "CSS / style refact + change font + align JS TOC aligned with pydata-theme\n"
    },
    {
      "commit": "368cc61eec39e3ce3ed59f6357a4e4ce7a0b3acd",
      "tree": "d341dd02de8cb997cef4e68b9ee41a71a9b65101",
      "parents": [
        "3d9dbbc42ea41ad434a597ddd560be9659252414"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Apr 28 15:17:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 15:17:31 2026"
      },
      "message": "Doc: TOC navigation bar (#2828)\n\nShow a TOC navigation right sidebar, which automatically follows the\nscrolling via JS. This is especially useful for /api.html view, which is\nsuper long. Heavily inspired by pydata-sphinx-data theme."
    },
    {
      "commit": "3d9dbbc42ea41ad434a597ddd560be9659252414",
      "tree": "f9b7daae9fd66891a2648e3e32dbc1bd6c2f2aae",
      "parents": [
        "c987b0c9f5584ddf9d8c3e5bfa34a3276c405bd8"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Apr 24 17:59:32 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Apr 24 17:59:32 2026"
      },
      "message": "Fix some broken URLs\n"
    },
    {
      "commit": "c987b0c9f5584ddf9d8c3e5bfa34a3276c405bd8",
      "tree": "120233079286fae50c4aeb23aa3c2a71a46a635e",
      "parents": [
        "66f43c6c9d44ef6aa0cbcd51e9a7e3e26a396ee9"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Apr 24 17:44:22 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Apr 24 17:44:22 2026"
      },
      "message": "CSS: split sections into code.css and home.css\n"
    },
    {
      "commit": "66f43c6c9d44ef6aa0cbcd51e9a7e3e26a396ee9",
      "tree": "f094174664dbe00f49828eaacb8d89fe0d342477",
      "parents": [
        "0482ac774460a1bde61f32449b98b65a2b59cb4a"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 23 23:09:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 23 23:09:35 2026"
      },
      "message": "Sphinx code autolink (#2826)\n\nDoc: make code sample clickable (brings to API ref)\n\nAdds check-codeautolink sphinx extension:\nhttps://sphinx-codeautolink.readthedocs.io/en/latest/\n\nIdentifiers in code blocks (e.g. ``p \u003d psutil.Process()``,\n``p.cpu_percent()``) are now clickable. Hover over one of those to see\nthe highlight, then click to jump to the corresponding API reference\ndoc."
    },
    {
      "commit": "0482ac774460a1bde61f32449b98b65a2b59cb4a",
      "tree": "aac77c0eb7620ab87a0fc3c8c32d5b8c49fd0554",
      "parents": [
        "38fc10b1d414b06b599adbf21243de283c79a2f1"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 23 19:30:03 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 23 19:30:03 2026"
      },
      "message": "Bump RTD python version to 3.12 so we can use sphinx 9.1\n"
    },
    {
      "commit": "38fc10b1d414b06b599adbf21243de283c79a2f1",
      "tree": "a36e20a7394eaddb8d40ec7b821c1dd33ed9d843",
      "parents": [
        "a9bc87ab8501c50b96f7e32add69fad20323992f"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 23 19:27:31 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 23 19:27:31 2026"
      },
      "message": "Add blog (#2825)\n\nAdd a new blog to the doc/site, built on top of `ablog`, with 20 posts imported \nfrom https://gmpy.dev, covering psutil topics from 2014 to 2026.\n\nWith this, blog posts become part of the official doc, fully integrated\nin the site, meaning they are **searchable**, which is the real value\nhere. Hopefully this will encourage me to post more frequently and write\nhigher-quality posts.\n\nBlog is accessible via a `Blog` link in the top bar.\n\nAlso:\n\n- Add `sphinxext-opengraph` extension: every post emits `og:*` HTML\n  tags, meaning URLs shared on social medias (X, Reddit, etc) will show rich\n  previews (logo + title) instead of a raw URL. This applies to all site pages, not\n  only blog posts.\n\n- Use `sphinx-sitemap` extensions: reachable at `/sitemap.xml`, it\n  should help search engine discovery.\n\n- Atom feed is at `/blog/atom.xml`, auto-discovered from every page (not\n  only blog pages).\n\n- Add new `make test-docs` target and `docs/test_docs.py`, which runs\n  sanity checks against the built HTML docs. \n\n## List page\n\nCustomize `ablog` template to show tags, years, title, summary and a\n\"featured\" icon, to mark the best posts (the \"must read\"). Also show a\nRSS icon on top and in the footer.\n\n## Post page\n\nCustomize `ablog` template, to show pretty much the same things + a \"X\nminutes read\" info:\n\n## Selected tag page\n\nCustomize `ablog` template, to highlight the clicked tag + show all\ntags:\n\n## Search results page\n\nMake the search results page show an icon for blog posts, so they are\nidentifiable:"
    },
    {
      "commit": "a9bc87ab8501c50b96f7e32add69fad20323992f",
      "tree": "9cf883bb3da70d1e12b4ac0e258e8819800fc19d",
      "parents": [
        "06950267a42107d3859fe3703f20ad313bd87e01"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Apr 19 15:27:15 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Apr 19 15:27:15 2026"
      },
      "message": "Theming of pygments, glossary, adoptions, search res, footer\n"
    },
    {
      "commit": "06950267a42107d3859fe3703f20ad313bd87e01",
      "tree": "6b15038fddd3a90415e10577d6836195e2b1667f",
      "parents": [
        "bc6fdac8f208f1faa2920875cad931450c939e5c"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Apr 17 19:38:58 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Apr 17 19:38:58 2026"
      },
      "message": "Simplify and rename rst_unused_targets.py script\n"
    },
    {
      "commit": "bc6fdac8f208f1faa2920875cad931450c939e5c",
      "tree": "fe11372723ed55147aac3d93a849526f239ba99d",
      "parents": [
        "d58067a182d2ffbe609c3f4f27683ffd4b45da77"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Apr 17 18:49:27 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Apr 17 18:49:27 2026"
      },
      "message": "Doc: use rst_prolog to avoid including links + module in every .rst file\n"
    },
    {
      "commit": "d58067a182d2ffbe609c3f4f27683ffd4b45da77",
      "tree": "e1691c102d571fcc40b1e088484466fc11516538",
      "parents": [
        "02eb82f0a374b1915a95efd74be59dd1187cce90"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Apr 17 18:29:10 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Apr 17 18:29:10 2026"
      },
      "message": "Revert \"Get rid of _links.rst; use sphinx prolog + remove rst_check_dead_refs.py\"\n\nThis reverts commit 02eb82f0a374b1915a95efd74be59dd1187cce90.\n"
    },
    {
      "commit": "02eb82f0a374b1915a95efd74be59dd1187cce90",
      "tree": "bd4a717f40d88f46a328f66c23485371fed7df8c",
      "parents": [
        "05cd23530488f549a1a3abc447ab2e07889b7b03"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Apr 17 18:25:44 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Apr 17 18:27:24 2026"
      },
      "message": "Get rid of _links.rst; use sphinx prolog + remove rst_check_dead_refs.py\n"
    },
    {
      "commit": "05cd23530488f549a1a3abc447ab2e07889b7b03",
      "tree": "e1691c102d571fcc40b1e088484466fc11516538",
      "parents": [
        "6811bd4c29b34f4d2bd67507f36859c35c29f3ad"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Apr 17 12:07:49 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 17 12:07:49 2026"
      },
      "message": "Doc: wrap .rst lines to 79 chars + introduce `rstwrap` formatter (#2823)"
    },
    {
      "commit": "6811bd4c29b34f4d2bd67507f36859c35c29f3ad",
      "tree": "0370b3845d92515981fd7b87019d6e6ddc4b2259",
      "parents": [
        "92bed3e35cd12abb17282bca4ccdf3b939525ffa"
      ],
      "author": {
        "name": "Santhosh Raju",
        "email": "santhosh.raju@gmail.com",
        "time": "Fri Apr 17 07:35:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 17 07:35:14 2026"
      },
      "message": "Handle `EFAULT` for NetBSD processes correctly. (#2822)"
    },
    {
      "commit": "92bed3e35cd12abb17282bca4ccdf3b939525ffa",
      "tree": "7221462ce6fd35fc4a1f7778d70c2fabba05ec43",
      "parents": [
        "f5f8ad7b3f9667a66e4f71beb883d038dda0782e"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 16 20:49:54 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 16 20:49:54 2026"
      },
      "message": "Add more PYPI metadata (issues, changelog, etc.)\n"
    },
    {
      "commit": "f5f8ad7b3f9667a66e4f71beb883d038dda0782e",
      "tree": "340e5f34bbd9b5ce15bc2d8f5eaa2e71f5ce05f1",
      "parents": [
        "ba88eddfd16006a38c5b2d7a805a684d06177792"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Apr 14 10:24:04 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Apr 14 10:24:04 2026"
      },
      "message": "Doc: wrap line len to max 79 chars for all .rst files\n"
    },
    {
      "commit": "ba88eddfd16006a38c5b2d7a805a684d06177792",
      "tree": "81c2a85e40b31e6ce33657205f794beccbcbb107",
      "parents": [
        "55a6c788d82f9ebbd4777a4cc09dfc873a612531"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Apr 13 23:58:18 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Apr 13 23:58:18 2026"
      },
      "message": "RsT: fix warnings\n\nSigned-off-by: Giampaolo Rodola \u003cg.rodola@gmail.com\u003e\n"
    },
    {
      "commit": "55a6c788d82f9ebbd4777a4cc09dfc873a612531",
      "tree": "c8b1860b0d06e37110945ac76b818a870ba2a726",
      "parents": [
        "d4c820b63f82836f4898468744eade476b39de50"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Apr 13 19:21:41 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Apr 13 19:21:41 2026"
      },
      "message": "Make rst linter more strict\n"
    },
    {
      "commit": "d4c820b63f82836f4898468744eade476b39de50",
      "tree": "0f77d4823f9e814b5d672242367253808da6b088",
      "parents": [
        "3f3c26a5f3f1c5cf7578abf0087543d119c83a82"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Apr 13 15:54:11 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Apr 13 15:54:11 2026"
      },
      "message": "Doc: light theme for code blocks (no longer monokai)\n"
    },
    {
      "commit": "3f3c26a5f3f1c5cf7578abf0087543d119c83a82",
      "tree": "c6360d6d99a9b738078d9526f9ceec6b3354c4fd",
      "parents": [
        "2ed90c66c75ccfd5212f1e621199c30f4c656df6"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Apr 12 18:39:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 12 18:39:38 2026"
      },
      "message": "Doc: keyboard shortcuts for search, search results, toggle dark mode (#2820)\n\n## Keyboard shortcuts (search)\n\n- Search: ``Ctrl+K`` now focuses the search box (replaces ``/``).\n- We no longer rely on Read The Docs search pop-up (I don\u0027t like it).\n- Instead we rely on Sphinx search results, which are now styled similar\nto GitHub search results, using cards with subtle borders and shadows.\n- We can use ``Up``/``Down`` arrow keys to navigate Sphinx search\nresults, and ``Enter`` to open them.\n\n## Keyboard shortcuts (dark mode)\n\n- ``Shift+D`` can be used to toggle dark mode (mouse hover will provide\na hint)\n\n## New /about page\n\nIt is shown only in the footer, and points to instructions on how to use\nthey keyboard shortcuts.\n\n## UI\n\nThe search box shows a hint that it\u0027s possible to use the new shortcut\nvia ``ctrl + k``."
    },
    {
      "commit": "2ed90c66c75ccfd5212f1e621199c30f4c656df6",
      "tree": "b2d9a93fc11e24e0ba1addbcf9696769cfab80de",
      "parents": [
        "6d8e37ab5ff830b385d3e3961a2949772a287b8f"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Apr 12 02:27:25 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Apr 12 02:27:25 2026"
      },
      "message": "Modify rendering of genindex.html\n"
    },
    {
      "commit": "6d8e37ab5ff830b385d3e3961a2949772a287b8f",
      "tree": "7e4c29cb48c50bc6487fff58fcbdffdcb79c14d1",
      "parents": [
        "67dbfebeb9b2de966625d3eda5a67b878903421c"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Apr 12 01:26:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 12 01:26:42 2026"
      },
      "message": "Doc: add top bar (#2819)\n\nThe main reason to add a top bar is because of the need to show a GitHub button somewhere. It\u0027s too important not to.  Right now I showed that in the home and in the footer, but it\u0027s not enough. So let\u0027s use a top bar, which is what (e.g.) pydata theme or rtdocs does.\n\nMove the light/dark theme button in the top bar, and also show the current psutil version (points to PyPI).\n\nOn the left, we always have a clickable \"[LOGO] psutil\" thingie, which is the way to \"go home\". For this reason I removed the \"Home\" link from the sidebar: it\u0027s redundant now, and the sidebar is already pretty long, so let\u0027s save space\n\n\u003cimg width\u003d\"1833\" height\u003d\"1069\" alt\u003d\"image\" src\u003d\"https://github.com/user-attachments/assets/03098a81-b1a5-49d9-b103-b150e2f7ff13\" /\u003e"
    },
    {
      "commit": "67dbfebeb9b2de966625d3eda5a67b878903421c",
      "tree": "41d5f0a5cb41d55779196fb8672841ffb42816a9",
      "parents": [
        "f0142488536e2102b543122a0ccd9991bd704687"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Apr 11 20:19:49 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Apr 11 20:19:49 2026"
      },
      "message": "Some home CSS style\n"
    },
    {
      "commit": "f0142488536e2102b543122a0ccd9991bd704687",
      "tree": "81cc823ca83527ebb78cf1b13ddb8609f9eb7114",
      "parents": [
        "9ee58fcba2a99220833e510aaef031f17a500db9"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Apr 11 16:40:03 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Apr 11 16:40:03 2026"
      },
      "message": "Doc / home: add description cards\n"
    },
    {
      "commit": "9ee58fcba2a99220833e510aaef031f17a500db9",
      "tree": "9f240783ba4d5ca9cf682ea6f36decc3c34c9de4",
      "parents": [
        "ae09c82d85aab7b0e97ef90ad15abd3b5c4a6647"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Apr 11 14:32:42 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Apr 11 14:32:42 2026"
      },
      "message": "Add System tools source code section in DEVNOTES.md\n"
    },
    {
      "commit": "ae09c82d85aab7b0e97ef90ad15abd3b5c4a6647",
      "tree": "0fd9183ff8d75df80ba59c2dd4c51a225d7b316f",
      "parents": [
        "970287d2239050921d0ad69d7099718193cb506a"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Apr 11 11:46:41 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 11 11:46:41 2026"
      },
      "message": "[OpenBSD] expose swap_memory() sin and sout counters #2816 (#2817)"
    },
    {
      "commit": "970287d2239050921d0ad69d7099718193cb506a",
      "tree": "951727d78e1d151cd678c045ba3f30276fec83c8",
      "parents": [
        "dbe15d9c73674b2b140e7309f148b6ddbbabda38"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 09 16:19:56 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 09 16:19:56 2026"
      },
      "message": "#2815 / NetBSD: don\u0027t include virtual pages in shared mem calculation\n"
    },
    {
      "commit": "dbe15d9c73674b2b140e7309f148b6ddbbabda38",
      "tree": "68ea1bd36d0c09dcbfd2c6f9d80ac9662ebc6c23",
      "parents": [
        "3c6056265302395208a131b342721ad936ddb169"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 09 16:07:17 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 09 16:07:17 2026"
      },
      "message": "#2814 / NetBSD: don\u0027t include anon pages in cached mem calculation\n"
    },
    {
      "commit": "3c6056265302395208a131b342721ad936ddb169",
      "tree": "f9a040e52eacbbc24db635be34058b6dc41081a0",
      "parents": [
        "74e6793c75bcac13e587dcd61080b75e5fdbc467"
      ],
      "author": {
        "name": "Santhosh Raju",
        "email": "santhosh.raju@gmail.com",
        "time": "Thu Apr 09 15:19:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 15:19:42 2026"
      },
      "message": "Remove procfs dependency for NetBSD (#2805)"
    },
    {
      "commit": "74e6793c75bcac13e587dcd61080b75e5fdbc467",
      "tree": "5ccf49bc54668dad387f1c40d43b7713ffd452d2",
      "parents": [
        "6829d2dcc71ca499c2cdc7934eaa6b96fd91ec87"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 09 15:12:42 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 09 15:12:42 2026"
      },
      "message": "Write OpenBSD tests for virtual memory + add clarifying comments about it\n"
    },
    {
      "commit": "6829d2dcc71ca499c2cdc7934eaa6b96fd91ec87",
      "tree": "8d0d4cdc1d90c09f829162cb4c06261d1bd1bcd1",
      "parents": [
        "1228be61b355148fe004a9eaea6ad74c15a73161"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 09 13:44:19 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 09 13:44:19 2026"
      },
      "message": "Add OpenBSD comment about total memory\n"
    },
    {
      "commit": "1228be61b355148fe004a9eaea6ad74c15a73161",
      "tree": "8ca965743b4c964b29a55b1e8a42df987c3599ca",
      "parents": [
        "1209a765b996f10ba39a4673a258b4d3824585ec"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 09 13:27:58 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 09 13:27:58 2026"
      },
      "message": "OpenBSD: treat \u0027cached\u0027 and \u0027buffers\u0027 as aliases\n\n\"top\" derives cached memory from `bcstats.numbufpages`, which\ntechnically corresponds to \u0027buffers\u0027 memory:\nhttps://github.com/openbsd/src/blob/master/usr.bin/top/machine.c\n\nIntuitively, \u0027cached\u0027 memory should instead be\n`uvmexp.vnodepages`, described as \u0027vnode page cache\u0027, but it\u0027s\nalways 0, and the struct contains an \"XXX\" comment, suggesting\nthat `vnodepages` should probably not be used. This article\nsuggests that \u0027buffers\u0027 became the primary caching mechanism in\nthe system:\nhttps://undeadly.org/cgi?action\u003darticle;sid\u003d20140908113732\n\nSo, treat \u0027cached\u0027 and \u0027buffers\u0027 as aliases. See:\nhttps://github.com/giampaolo/psutil/issues/2813\n"
    },
    {
      "commit": "1209a765b996f10ba39a4673a258b4d3824585ec",
      "tree": "5138da1c8b35859dfce15cd05f856d973a4c0f61",
      "parents": [
        "d9eb9855a63d76089c0ebc4b685f2efd441eda0d"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 09 11:33:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Apr 09 11:33:54 2026"
      },
      "message": "[OpenBSD] return correct virtual_memory().shared (#2812)\n\nRelated: https://github.com/giampaolo/psutil/issues/2792.\n\nOn OpenBSD,  `shared` memory is missing the `* pagesize` multiplier. In addition, the way we calculate it\u0027s wrong. We calculate it as:\n\n\n```c\nshared \u003d (unsigned long long)vmdata.t_vmshr + vmdata.t_rmshr;\n```\n\nWhich means \"shared virtual memory\" + \"shared real memory\". \nFrom:\n\n```c\n/* systemwide totals computed every five seconds */\nstruct vmtotal {\n    u_int16_t t_rq;     /* length of the run queue */\n    u_int16_t t_dw;     /* jobs in ``disk wait\u0027\u0027 (neg priority) */\n    u_int16_t t_pw;     /* jobs in page wait */\n    u_int16_t t_sl;     /* jobs sleeping in core */\n    u_int16_t t_sw;     /* swapped out runnable/short block jobs */\n    u_int32_t t_vm;     /* total virtual memory */\n    u_int32_t t_avm;    /* active virtual memory */\n    u_int32_t t_rm;     /* total real memory in use */\n    u_int32_t t_arm;    /* active real memory */\n    u_int32_t t_vmshr;  /* shared virtual memory */\n    u_int32_t t_avmshr; /* active shared virtual memory */\n    u_int32_t t_rmshr;  /* shared real memory */\n    u_int32_t t_armshr; /* active shared real memory */\n    u_int32_t t_free;   /* free memory pages */\n};\n```\n\nNotice how there\u0027s 3 values related to shared memory:\n\n```\n    u_int32_t t_vmshr;  /* shared virtual memory */\n    u_int32_t t_avmshr; /* active shared virtual memory */\n    u_int32_t t_rmshr;  /* shared real memory */\n```\n\nOur calculation is probably incorrect, or a \"double count\".\nWhat we\u0027re probably interested in is `t_rmshr;  /* shared real memory */`."
    },
    {
      "commit": "d9eb9855a63d76089c0ebc4b685f2efd441eda0d",
      "tree": "598a384243434983e469adbf314e633d7edcea65",
      "parents": [
        "eb0eb30c184352d6ffd23450e87f179795b0fee8"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 09 08:38:34 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 09 08:38:34 2026"
      },
      "message": "Turn DEVNOTES into DEVNOTES.md\n"
    },
    {
      "commit": "eb0eb30c184352d6ffd23450e87f179795b0fee8",
      "tree": "c18830647d8227195d10bd1d1255fcd06e8a3a17",
      "parents": [
        "9c2a9a4f078d632fd250ba9325b666cb2f0d9073"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Apr 08 17:02:08 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Apr 08 17:02:08 2026"
      },
      "message": "Doc: on mobile, close the sidebar when tapping content or swiping left\n"
    },
    {
      "commit": "9c2a9a4f078d632fd250ba9325b666cb2f0d9073",
      "tree": "0a3dd5a29877097837204fc90fc3d27eb6bae108",
      "parents": [
        "99284b4a223d343faf84fa02f71551e1d0d580cd"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Apr 08 01:09:12 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Apr 08 01:09:12 2026"
      },
      "message": "Fix RTD build failure\n"
    },
    {
      "commit": "99284b4a223d343faf84fa02f71551e1d0d580cd",
      "tree": "d0dce6f588a3d5d431c4cee3f8fe44d865d963f7",
      "parents": [
        "45ee4ac8ea10b48571120d74974773d100f7fd60"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Apr 08 01:02:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 08 01:02:17 2026"
      },
      "message": "Doc: add general index (#2808)\n\nThis is provided for free by Sphinx, and one of its most underrated features. For a big lib like psutil, having a general index is extremely useful."
    },
    {
      "commit": "45ee4ac8ea10b48571120d74974773d100f7fd60",
      "tree": "0f0996d9c66458a5c2a621002f434e5e4864b335",
      "parents": [
        "5c183d48bd9599ffb8a522516a760992a95af176"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Apr 07 14:25:54 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Apr 07 14:25:54 2026"
      },
      "message": "Doc: add more cross-refs to glossary, fix typos\n"
    },
    {
      "commit": "5c183d48bd9599ffb8a522516a760992a95af176",
      "tree": "bc744186ffacde899d5f782b2c19a7fee06bd5da",
      "parents": [
        "cc9c0f000eb1733854f80b782b04677be9e84682"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Apr 07 00:01:46 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Apr 07 00:01:46 2026"
      },
      "message": "Doc: yet another cleanup / rewording\n"
    },
    {
      "commit": "cc9c0f000eb1733854f80b782b04677be9e84682",
      "tree": "ae4185b548e0fc4c4a996ceb0f8ea2e82c2d9237",
      "parents": [
        "e40529227462d4aae30f26c5c9f14d0c9b76d079"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Apr 06 21:44:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 06 21:44:23 2026"
      },
      "message": "[Windows] make `boot_time()` return the same result across processes  (#2807)\n\nFixes #1007 for the second time.\n\n`boot_time()` on Windows no longer fluctuates by ~1 second across calls or across processes. \nIt is now read atomically from the kernel via ``NtQuerySystemInformation(SystemTimeOfDayInformation)``, replacing the old ``time.time() - uptime()`` computation that sampled two counters from Python and produced sub-second differences.\n\nDoc had this note:\n\n```\n  .. note::\n    on Windows this function may return a time which is off by 1 second if it\u0027s\n    used across different processes (see issue :gh:`1007`).\n```\n    \nThis is now fixed."
    },
    {
      "commit": "e40529227462d4aae30f26c5c9f14d0c9b76d079",
      "tree": "c558444727d6ef207cf310cd8d6d15aee9055d1f",
      "parents": [
        "55dfba1b86900ef90c1a89b096f3b6783d65f1c0"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Apr 06 00:18:08 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 06 00:18:08 2026"
      },
      "message": "Doc big rewording (#2804)"
    },
    {
      "commit": "55dfba1b86900ef90c1a89b096f3b6783d65f1c0",
      "tree": "36c7c73c4e2ddb361a6ef509b1f83df482acd7f3",
      "parents": [
        "e46927379970bf98dd72bda9b12b9a8643001307"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Apr 05 00:33:54 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 05 00:33:54 2026"
      },
      "message": "Doc dark theme (#2803)"
    },
    {
      "commit": "e46927379970bf98dd72bda9b12b9a8643001307",
      "tree": "a1760c9c8b5c8ba6ad5b58fe1db889c875900de2",
      "parents": [
        "2e74d02745109355b5ae975395b73396d71dafa4",
        "b8269e1dc01c304f86eda8d242687479905cd05d"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Apr 04 19:22:01 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Apr 04 19:22:01 2026"
      },
      "message": "Merge branch \u0027doc-reorg-2\u0027\n"
    },
    {
      "commit": "b8269e1dc01c304f86eda8d242687479905cd05d",
      "tree": "a1760c9c8b5c8ba6ad5b58fe1db889c875900de2",
      "parents": [
        "5ae217d18c03eca5fa57d0ccdcd14f357089c3b4"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Apr 04 19:21:21 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Apr 04 19:21:21 2026"
      },
      "message": "Shorten changelog.rst entries\n"
    },
    {
      "commit": "2e74d02745109355b5ae975395b73396d71dafa4",
      "tree": "338a52e460949619cf462fba97d2283fa2e2ca40",
      "parents": [
        "027774dae15103a9a531e2678c302310b2ad449c",
        "5ae217d18c03eca5fa57d0ccdcd14f357089c3b4"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Apr 04 19:01:21 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Apr 04 19:01:21 2026"
      },
      "message": "Merge branch \u0027doc-reorg-2\u0027\n"
    },
    {
      "commit": "5ae217d18c03eca5fa57d0ccdcd14f357089c3b4",
      "tree": "338a52e460949619cf462fba97d2283fa2e2ca40",
      "parents": [
        "64586a6de12c74520ed6049378bcbc8a6b2654b8"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Apr 04 19:01:10 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Apr 04 19:01:10 2026"
      },
      "message": "Doc: fix many broken refs, especially in changelog.rst\n"
    },
    {
      "commit": "027774dae15103a9a531e2678c302310b2ad449c",
      "tree": "a30ab21bdc18e4553441e7505a4fcaf6a2949501",
      "parents": [
        "64586a6de12c74520ed6049378bcbc8a6b2654b8"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Apr 04 17:17:02 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Apr 04 17:17:38 2026"
      },
      "message": "Sphix: add --nitpicky (fail on bad ref) --jobs\u003dauto (parallel run)\n"
    },
    {
      "commit": "64586a6de12c74520ed6049378bcbc8a6b2654b8",
      "tree": "854e4db7eeac60291c9ccafc21934142383c870f",
      "parents": [
        "0e36014bb09636e85fc4e7afaf5b7248e06114f3"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Apr 03 23:52:15 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Apr 03 23:52:15 2026"
      },
      "message": "Fix C syntax err in C on Windows committed by accident\n"
    },
    {
      "commit": "0e36014bb09636e85fc4e7afaf5b7248e06114f3",
      "tree": "d3a618af1c14615dc6a23956f0ef0bc1a0aa70af",
      "parents": [
        "3839cac88aac32c3411f2879a8e37dd6f62d55ec"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Apr 03 23:51:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 03 23:51:45 2026"
      },
      "message": "Doc: add `:field:` Sphinx role for named tuple fields (#2802)\n\nIntroduce a new Sphinx extension that provides the `:field:`fieldname` role for \n**semantically marking named tuple fields** in API documentation, so they are \nalways distinguishable from the rest, both semantically and visually (up until \nnow the were marked as bold, e.g. ``**name**``).\nThis replaces inconsistent use of backticks and bold formatting throughout the \ndocs. The CSS now renders field names differently from the rest."
    },
    {
      "commit": "3839cac88aac32c3411f2879a8e37dd6f62d55ec",
      "tree": "499c6da406ce34fcd43b0dd797278edec77302db",
      "parents": [
        "16b4a8c64fd4df0025b800cf0cb2ab2d1f78525e"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 02 17:57:00 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 02 17:57:00 2026"
      },
      "message": "Refact recipes a bit\n"
    },
    {
      "commit": "16b4a8c64fd4df0025b800cf0cb2ab2d1f78525e",
      "tree": "ec1b4b182b97e5e705ebe481f964df873337110f",
      "parents": [
        "35d3b4d59e8b8d395a58f6b6bbca0dbc9804a385"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 02 17:04:04 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 02 17:04:04 2026"
      },
      "message": "Doc: cross-ref glossary terms, improve clarity\n\nRefactor documentation for better readability by:\n- Use RST :term: roles consistently for glossary cross-references\n- Restructure glossary entries for clarity (e.g., expand swap memory,\nadd\n  thrashing entry, clarify memory types)\n- Add memory and disk I/O recipes with real-time examples\n"
    },
    {
      "commit": "35d3b4d59e8b8d395a58f6b6bbca0dbc9804a385",
      "tree": "16fa4ea6bc58c06f80d565733f7f1567ab0cdc46",
      "parents": [
        "c12ffb4ca451ec8721030a212525f18b62243c4f"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 02 10:13:11 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 02 10:13:11 2026"
      },
      "message": "C: convert /* comments to // comments\n"
    },
    {
      "commit": "c12ffb4ca451ec8721030a212525f18b62243c4f",
      "tree": "4d61b0fe8ff11c98d361cd00e9cb6455e89aaa87",
      "parents": [
        "90e4de4e774f15102641debc65b18a400eccb4cb"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 02 00:17:10 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Apr 02 00:17:10 2026"
      },
      "message": "Adjust docstrings + add C \u0027heap\u0027 entry to glossary.rst\n"
    },
    {
      "commit": "90e4de4e774f15102641debc65b18a400eccb4cb",
      "tree": "8cca2a957fe2805b4cb48056affd9257b5f281d1",
      "parents": [
        "7108bfd858cc7fa4b291455bdd41a7db2d4b4b39"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Apr 01 21:19:29 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Apr 01 21:19:29 2026"
      },
      "message": "Doc: move scripts/ link refs into _links.rst\n"
    },
    {
      "commit": "7108bfd858cc7fa4b291455bdd41a7db2d4b4b39",
      "tree": "896596c5e0163abc896e60071a9d339754895fa6",
      "parents": [
        "c1e7c41adff3758a64ba43aac995fcaf7a77569d"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Apr 01 21:12:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 01 21:12:01 2026"
      },
      "message": "Doc: shorten and improve clarity of docstrings and doc (#2801)"
    },
    {
      "commit": "c1e7c41adff3758a64ba43aac995fcaf7a77569d",
      "tree": "d297b67017b185d5efedbe175aa822a4177a7878",
      "parents": [
        "861ef8b57bcf4d7f6711ca474bf94443bc2fa616"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Apr 01 16:51:16 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Apr 01 16:51:16 2026"
      },
      "message": "Fix #2799: fix Process.as_dict() names alphabetically\n"
    },
    {
      "commit": "861ef8b57bcf4d7f6711ca474bf94443bc2fa616",
      "tree": "d14770b65b176a88efc78762040196028a9b3245",
      "parents": [
        "17c239c754e4c353e7a5b9628a35637f3834fe4f"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Apr 01 16:30:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 01 16:30:50 2026"
      },
      "message": "Expose `Process.attrs`, a frozenset of valid `as_dict()` names (#2800)\n\n## Problem\n\nCurrently `_as_dict_attrnames` is a private set used internally by `Process.as_dict()` and `psutil.process_iter()` to validate the `attrs\u003d` parameter. Users have no official way to know which names are valid without reading the source.\n\nThe suggested way to do that according to official doc is:\n\n```python\n# get a list of valid attrs names\nlist(psutil.Process().as_dict().keys())\n```\n\nBut that implies fetching process info, which is slow.\n\n## Solution\n\nExpose a new `Process.attrs` class attribute returning a frozenset. These are all the valid attribute names accepted by `Process.as_dict()` and `psutil.process_iter()`, excluding deprecated names (e.g. `memory_full_info`).\n\nUsage examples:\n\nAll attrs:\n\n```python\npsutil.process_iter(attrs\u003dpsutil.Process.attrs)\n```\n\nAll except connections:\n\n```python\npsutil.process_iter(attrs\u003dpsutil.Process.attrs - {\"connections\"})\n```\n\n## The attrs\u003d[] case of process_iter()\n\nUp till now `process_iter(attrs\u003d[])` (empty list) means \"give me all the attributes\" (it\u0027s also documented). This is now deprecated (`DeprecationWarning`)."
    },
    {
      "commit": "17c239c754e4c353e7a5b9628a35637f3834fe4f",
      "tree": "6be015c680cfdc3fc945e0d77aa266f9f0d3946a",
      "parents": [
        "92f826326210aca70a2908cae79b36f85fc977eb"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Apr 01 09:22:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Apr 01 09:22:38 2026"
      },
      "message": "Doc: create sponsors.html page (#2797)"
    },
    {
      "commit": "92f826326210aca70a2908cae79b36f85fc977eb",
      "tree": "a6cbe34b132a8bca57243bc81cf02680b4390760",
      "parents": [
        "f80c9a2c2f488b7bb80db1b933511648203f4bc1"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Apr 01 08:33:01 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Apr 01 08:33:01 2026"
      },
      "message": "Add doc notes about memory_info_ex() name reuse\n"
    },
    {
      "commit": "f80c9a2c2f488b7bb80db1b933511648203f4bc1",
      "tree": "edeecfcaa980c9397f4eb1763770b75c980ab191",
      "parents": [
        "736a051023a4dc1400fd9c53010cf2cdb1b8ee31"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Mar 31 19:20:19 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Mar 31 19:20:19 2026"
      },
      "message": "Doc: add JS script to open external URLs in a new tab\n"
    },
    {
      "commit": "736a051023a4dc1400fd9c53010cf2cdb1b8ee31",
      "tree": "40366139170bc55a23de001ffed57ce912e146c0",
      "parents": [
        "04794aa03cb9d30287e8e7fd9c80acc8c4f2aa46"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Mar 31 13:50:25 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Mar 31 13:50:25 2026"
      },
      "message": "Update README\n"
    },
    {
      "commit": "04794aa03cb9d30287e8e7fd9c80acc8c4f2aa46",
      "tree": "25d20b153f4b173575ade87fc36e4df2f71ef531",
      "parents": [
        "f21aa556a2aa193b7c12f6116934fd28035e44b8"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Mar 31 10:34:13 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 31 10:34:13 2026"
      },
      "message": "FreeBSD: zero-initialize buf str for cpu_freq() #2796, #2791, #2795\n\n#2791, #2795, FreeBSD: zero-initialize buf str for cpu_freq()\n  \npsutil_sysctlbyname() helpers previously required the returned data size to exactly match the allocated buffer size. Relaxed the check to allow the kernel to return fewer bytes than the buffer (normal for variable-length sysctl data), while still raising on overflow. - :gh:`2795`, [FreeBSD]: fix :func:`cpu_freq` failing with RuntimeError: sysctlbyname(\u0027dev.cpu.0.freq_levels\u0027) size mismatch on some systems."
    },
    {
      "commit": "f21aa556a2aa193b7c12f6116934fd28035e44b8",
      "tree": "08c76ca781685a63773d77f0fcdc05013dfe8d7e",
      "parents": [
        "d790c785dc7e1b69c13ccf8749b8b10724d05c8d"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Mar 30 19:07:25 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Mar 30 19:07:25 2026"
      },
      "message": "Fix image urls\n"
    },
    {
      "commit": "d790c785dc7e1b69c13ccf8749b8b10724d05c8d",
      "tree": "21d689b9d99987e84033ace9247e1c32807aa45c",
      "parents": [
        "9bf15bb20f2b091bff561fe4512ec1096e0e03bd"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Mar 30 18:55:41 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Mar 30 18:55:41 2026"
      },
      "message": "Doc: resize logos + remove dead static files\n"
    },
    {
      "commit": "9bf15bb20f2b091bff561fe4512ec1096e0e03bd",
      "tree": "5a9c3fd2c778fb003bf73b709db4ed5dc7fecf26",
      "parents": [
        "1d9a64370d8c56d626d4519bf59f9b99c3a20695",
        "0dfc24c8996f5c39b4114e6c8485d4ef09761179"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Mar 30 10:40:10 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Mar 30 10:40:10 2026"
      },
      "message": "Doc: modernize home page with quick boxes\n"
    },
    {
      "commit": "0dfc24c8996f5c39b4114e6c8485d4ef09761179",
      "tree": "e7a53f845da61da5bc03ed9d831983fb0a173ed2",
      "parents": [
        "2ba5be62fec40bb4ce3bd446bbeba704a9e858c5"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Mar 30 10:39:19 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Mar 30 10:39:19 2026"
      },
      "message": "Doc: modernize home page with quick boxes\n"
    },
    {
      "commit": "1d9a64370d8c56d626d4519bf59f9b99c3a20695",
      "tree": "000316e4ca2acc3a92b72d42de32b8ff43a83882",
      "parents": [
        "2ba5be62fec40bb4ce3bd446bbeba704a9e858c5"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Mar 30 00:13:49 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Mar 30 00:13:49 2026"
      },
      "message": "Doc: add \"last updated\" + external icons to footer\n"
    },
    {
      "commit": "2ba5be62fec40bb4ce3bd446bbeba704a9e858c5",
      "tree": "929033d694859805a82550c8b343df70ecc08974",
      "parents": [
        "388a3a48f8bfd1f8a75c7e92d5ca2e183385fb8d"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Mar 29 11:06:28 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Mar 29 11:06:28 2026"
      },
      "message": "Add JS script which highlights numbers and str in pycon REPL\n"
    },
    {
      "commit": "388a3a48f8bfd1f8a75c7e92d5ca2e183385fb8d",
      "tree": "86709900c49a776e79023326d81aff97f08b430f",
      "parents": [
        "0f0cdaa7d05f6a1dbbdb05b0e116186502c4e82a"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Mar 29 10:03:52 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Mar 29 10:03:52 2026"
      },
      "message": "Rename non-public enum Negsignal -\u003e NegSignal\n\nSigned-off-by: Giampaolo Rodola \u003cg.rodola@gmail.com\u003e\n"
    },
    {
      "commit": "0f0cdaa7d05f6a1dbbdb05b0e116186502c4e82a",
      "tree": "d8c0fa3ac5ab4dae1ab8fc92d74398e53409618a",
      "parents": [
        "445df3abcb57b85d2bb80d6b7b494dbad61c6026"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Mar 28 11:27:29 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sat Mar 28 11:27:29 2026"
      },
      "message": "Change CSS style of inline literals and API symbols\n"
    },
    {
      "commit": "445df3abcb57b85d2bb80d6b7b494dbad61c6026",
      "tree": "1560a7d784455a380e9bd4863e362fce56694e17",
      "parents": [
        "4e091ec11c09b18ad1923dabeb2e8a39f286b474"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Mar 27 23:24:20 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Mar 27 23:24:20 2026"
      },
      "message": "Doc: explain process states + add example on how to create a zombie\n"
    },
    {
      "commit": "4e091ec11c09b18ad1923dabeb2e8a39f286b474",
      "tree": "4eda403aae7c30bc3cbf2a9541b0ec80c6feae84",
      "parents": [
        "19e7ee7fdb1119d05158275475dd6fa2caa5bf74"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Mar 27 14:54:58 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Mar 27 14:54:58 2026"
      },
      "message": "Doc: re-arrange CONSTANTs section + remove superfluous parts\n"
    },
    {
      "commit": "19e7ee7fdb1119d05158275475dd6fa2caa5bf74",
      "tree": "29fdb3acfd0d28c355ac66274a1b89590708cc96",
      "parents": [
        "24cf3217ceaf7d8e6b8685089860a684c09e4f98"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Mar 27 11:42:52 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Fri Mar 27 11:42:52 2026"
      },
      "message": "Doc: renewed theme (CSS)\n"
    },
    {
      "commit": "24cf3217ceaf7d8e6b8685089860a684c09e4f98",
      "tree": "94700bfb7285a6dc0743bd6aec32e36a1653da09",
      "parents": [
        "d796d2f0528bd264de47a6003af0322246abe5bc"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Mar 26 22:56:50 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Mar 26 22:56:50 2026"
      },
      "message": "Sidebar style\n"
    },
    {
      "commit": "d796d2f0528bd264de47a6003af0322246abe5bc",
      "tree": "5a81aff7615daaa78e0f3197ba3a588dfe38650e",
      "parents": [
        "228ac061e6d397e9022a504086669fd01fbebc94"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Mar 26 21:58:38 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Mar 26 21:58:38 2026"
      },
      "message": "Use .. code-block:: none instead of :: + define reflinks at the bottom\n"
    },
    {
      "commit": "228ac061e6d397e9022a504086669fd01fbebc94",
      "tree": "dd1625bd7883a22667161a1094100871b62ec23b",
      "parents": [
        "29349f42dc8a4a20170e1b06b893f4ae7220bacf"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Mar 26 21:02:03 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Mar 26 21:02:03 2026"
      },
      "message": "Add docs/api-overview.rst section\n"
    },
    {
      "commit": "29349f42dc8a4a20170e1b06b893f4ae7220bacf",
      "tree": "201667e098993cba37d51035fc989fd9465e0ba2",
      "parents": [
        "bd0b8ac9f724edc68bce14a540256c4894f6fe94"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Mar 26 18:25:28 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Mar 26 18:25:28 2026"
      },
      "message": "Fix long HTML tables (also on mobile)\n"
    },
    {
      "commit": "bd0b8ac9f724edc68bce14a540256c4894f6fe94",
      "tree": "ec013ab24f8951ff15fd78cc40c55d82f2bdaa1b",
      "parents": [
        "2311002ec0cde6f871a8568d3373b536e34923c9"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Mar 26 15:03:34 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Mar 26 15:03:34 2026"
      },
      "message": "Add FAQ about named tuples\n"
    },
    {
      "commit": "2311002ec0cde6f871a8568d3373b536e34923c9",
      "tree": "a2ce300d47d332a53aa1a7808e7aa7dc009c37a4",
      "parents": [
        "25fd8aad6018f120f9f8b64de85483e30f8e3da1"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Mar 26 11:07:19 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Thu Mar 26 11:07:19 2026"
      },
      "message": "Doc: various improvements and cleanups\n"
    },
    {
      "commit": "25fd8aad6018f120f9f8b64de85483e30f8e3da1",
      "tree": "38f3cf7d89cc804eea6aad8b20607ab8108d79c6",
      "parents": [
        "dff63e8e4f20fe4e9a009e55d8532e7f56adec91"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Mar 25 18:49:14 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Wed Mar 25 18:49:14 2026"
      },
      "message": "Doc: standardize **fields** and *args* + add .. seealso:: entries\n"
    },
    {
      "commit": "dff63e8e4f20fe4e9a009e55d8532e7f56adec91",
      "tree": "b7bea85f7fa55148e62a12ba4808185677a8d84a",
      "parents": [
        "91a4fc566e9dd6a117895352b3be0eecaf0bcd64"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Mar 24 23:11:36 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Mar 24 23:11:36 2026"
      },
      "message": "Update devguide with notes about documentation\n"
    },
    {
      "commit": "91a4fc566e9dd6a117895352b3be0eecaf0bcd64",
      "tree": "4f307230734ad529e22b2acc5b3824a630f58e73",
      "parents": [
        "bf119c83b52dc07dd4f0b832c8944595028cbcb3"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Mar 24 17:03:00 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Tue Mar 24 17:03:00 2026"
      },
      "message": "Rename Git tags from release-X.Y.Z to vX.Y.Z\n"
    },
    {
      "commit": "bf119c83b52dc07dd4f0b832c8944595028cbcb3",
      "tree": "3a43b4fc09a18cab356e3802bd13f564868ac2d7",
      "parents": [
        "4f1364a4682e1fb082eca21dbf430d0aed702bd3"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Mar 23 18:53:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 23 18:53:22 2026"
      },
      "message": "Docs: add a /performance section (#2787)"
    },
    {
      "commit": "4f1364a4682e1fb082eca21dbf430d0aed702bd3",
      "tree": "96cb1ee40e8aff396a9e1921be022bb89df5d74b",
      "parents": [
        "87bde09cfdddabb0a2b8dbaea4376dcbc717a43c"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Mon Mar 23 09:47:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 23 09:47:21 2026"
      },
      "message": "`process_iter()`: pre-fetch Process methods + deprecate `.info` (#2786)\n\n## The problem\n\n`process_iter(attrs\u003d[\"name\", \"status\"])` currently stores results in a `p.info`  dict, creating two ways to access process attributes: `p.info[\"name\"]` and `p.name()`. I never liked this. As the Python Zen says:\n\n\u003e There should be one, and preferably only one, obvious way to do it\n\n## The plan\n\nThe goal is to make methods like `p.name()` return cached values directly when prefetched via `process_iter(attrs\u003d...)`, eliminating the need for `p.info`.\n\nBefore:\n\n```python\nfor p in psutil.process_iter(attrs\u003d[\"name\", \"status\"]):\n    print(p.info[\"name\"])\n    print(p.info[\"status\"])\n```\n\nAfter:\n\n```python\nfor p in psutil.process_iter(attrs\u003d[\"name\", \"status\"]):\n    print(p.name())  # cached, no syscall, no exceptions\n    print(p.status())  # cached, no syscall, no exceptions\n```\n\nThis is easier to read and type, and removes the awkward  dual model (methods vs info dict).\n\n`p.info` usage will still work (there\u0027s tons of code out there relying on it), but it will raise a `DeprecationWarning`.\n\nThis is expected to be the most significant change in psutil 8.0.0."
    },
    {
      "commit": "87bde09cfdddabb0a2b8dbaea4376dcbc717a43c",
      "tree": "dff240a0fe1543d5efc54d89ae609fb9fc1cdbea",
      "parents": [
        "6801f964a2045559aae0edb0f2453c3b673c386c"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Mar 22 14:30:26 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Mar 22 14:30:26 2026"
      },
      "message": "Process.__repr__: cast status to str\n"
    },
    {
      "commit": "6801f964a2045559aae0edb0f2453c3b673c386c",
      "tree": "e13f3d449c0a4d169e0f6793ffd550848cf7a709",
      "parents": [
        "f525199297fbe58a92bb1114b8ee9a9b0079f2ab"
      ],
      "author": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Mar 22 02:18:32 2026"
      },
      "committer": {
        "name": "Giampaolo Rodola",
        "email": "g.rodola@gmail.com",
        "time": "Sun Mar 22 02:18:32 2026"
      },
      "message": "FreeBSD: add test for cpu_times()\n"
    }
  ],
  "next": "f525199297fbe58a92bb1114b8ee9a9b0079f2ab"
}
