)]}'
{
  "log": [
    {
      "commit": "a0650129d9618c3bbcef3946c938d73696481bd9",
      "tree": "b2b832f8c1aa11d70a643033c936e9fdc36df3f3",
      "parents": [
        "b0c3d6f4771b8765f0863bcf24d0cc072e39b6cf",
        "0ecd6b91715f007a6444199b805bc0f996d14a7b"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@apache.org",
        "time": "Mon Oct 12 10:35:41 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 10:35:41 2026 +0100"
      },
      "message": "Merge pull request #2129 from ownik/master\n\ncli: Add --buildtree and --buildroot to bst artifact checkout"
    },
    {
      "commit": "b0c3d6f4771b8765f0863bcf24d0cc072e39b6cf",
      "tree": "a1c6c1d1459ecf45a95b5522d301ece3da640fe1",
      "parents": [
        "d50a198c2c6f9c106e0f2714d2fee265daeecb57",
        "9071383eb712e92fddd848d64d9acf54e4aeb0ca"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Mon Oct 12 10:34:50 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Oct 12 10:34:50 2026 +0200"
      },
      "message": "Merge pull request #2198 from apache/jbilleter/tar\n\n_tarfile.py: Apply fixes from Python 3.11.17"
    },
    {
      "commit": "0ecd6b91715f007a6444199b805bc0f996d14a7b",
      "tree": "0229dc499277adf8088e292cc84261ba761ea714",
      "parents": [
        "d50a198c2c6f9c106e0f2714d2fee265daeecb57"
      ],
      "author": {
        "name": "Nikita Ostrenkov",
        "email": "ownik.dev@gmail.com",
        "time": "Sat Oct 10 11:41:33 2026 +0300"
      },
      "committer": {
        "name": "Nikita Ostrenkov",
        "email": "ownik.dev@gmail.com",
        "time": "Sat Oct 10 19:27:52 2026 +0300"
      },
      "message": "cli: Add --buildtree and --buildroot to bst artifact checkout\n\nAllow checking out the cached build tree or the whole build root of an\nelement\u0027s artifact. Only the target artifact is pulled, as with\n`bst shell --use-buildtree`, the pull-buildtrees configuration is needed\nif the build tree is not available locally.\n\nFixed #1822\n"
    },
    {
      "commit": "9071383eb712e92fddd848d64d9acf54e4aeb0ca",
      "tree": "a1c6c1d1459ecf45a95b5522d301ece3da640fe1",
      "parents": [
        "d50a198c2c6f9c106e0f2714d2fee265daeecb57"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Sat Oct 10 16:45:53 2026 +0200"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Sat Oct 10 16:45:53 2026 +0200"
      },
      "message": "_tarfile.py: Apply fixes from Python 3.11.17\n"
    },
    {
      "commit": "d50a198c2c6f9c106e0f2714d2fee265daeecb57",
      "tree": "6e865512ae37ada1418a6693c1c44dd729db910d",
      "parents": [
        "a9ad1e2f88f88175806aa19aa51679e31567bc00",
        "5af035604df4f856073101d3b512c577756ea98c"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Tue Sep 29 09:19:14 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 29 09:19:14 2026 +0200"
      },
      "message": "Merge pull request #1424 from apache/chandan/simplify-pylint-config\n\n.pylintrc: Simplify config, only list overrides"
    },
    {
      "commit": "5af035604df4f856073101d3b512c577756ea98c",
      "tree": "6e865512ae37ada1418a6693c1c44dd729db910d",
      "parents": [
        "a9ad1e2f88f88175806aa19aa51679e31567bc00"
      ],
      "author": {
        "name": "Chandan Singh",
        "email": "chandan@chandansingh.net",
        "time": "Mon Aug 03 20:18:29 2020 +0000"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Sep 25 09:42:34 2026 +0200"
      },
      "message": ".pylintrc: Simplify config, only list overrides\n\nRather than having the full `.pylintrc`, only list the overrides that we\nhave compared to the default options. This makes it easy to identify\nwhat options we have modified, which is also similar to what we do for\nconfiguring other tools.\n\nAt the same time, also remove overrides corresponding to the `gi`\nmodule. They were added when this repository depended on the `ostree`\nmodule but that\u0027s no longer the case.\n\nrebase notes: I used `git diff b4a5df28972eb7191d703f0ad14aa2b522f7d036..master .pylintrc` to figure\nout what had changed since this was first written.\n\nrebased-by: Nathan Williams \u003cnathan.williams@codethink.co.uk\u003e\n"
    },
    {
      "commit": "a9ad1e2f88f88175806aa19aa51679e31567bc00",
      "tree": "683d13375684e2e3c3b590856008b30f51f358bb",
      "parents": [
        "c1142aea1e5406ceedafb4703c2a0200dee49dfa",
        "bb3c61a4fcedde1a90c4bbcfc09d386b737f8049"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Wed Sep 23 13:31:33 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 13:31:33 2026 +0200"
      },
      "message": "Merge pull request #2183 from jjardon/jjardon/f45\n\nTest against python 3.15"
    },
    {
      "commit": "c1142aea1e5406ceedafb4703c2a0200dee49dfa",
      "tree": "02f0c6757cb28010b3a2e386b61abf9193c4c4b5",
      "parents": [
        "94f476e9fbb9a89094b6af59497fc5fcf73f6775",
        "1e0b88e3192469694e470519ebc766d6b58c0a81"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Wed Sep 23 13:01:26 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 23 13:01:26 2026 +0200"
      },
      "message": "Merge pull request #2188 from nathanwilliams-ct/nathan/improve-alias-docs\n\nImprove documentation on how to use aliases with source plugins"
    },
    {
      "commit": "bb3c61a4fcedde1a90c4bbcfc09d386b737f8049",
      "tree": "6359125cc2ade472a45862f1a41ab8c4417af32b",
      "parents": [
        "c4812e3c77c263c4158759930fe90a9512fa0e84"
      ],
      "author": {
        "name": "Javier Jardón",
        "email": "jjardon@gnome.org",
        "time": "Sun Aug 23 15:26:04 2026 +0100"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Wed Sep 23 12:44:00 2026 +0200"
      },
      "message": "ci: Add Fedora 45 job\n\nThis distro has Python 3.15 by default.\n"
    },
    {
      "commit": "c4812e3c77c263c4158759930fe90a9512fa0e84",
      "tree": "c44f848dd3dad96378fb5760df6de021136a12ed",
      "parents": [
        "9a93571b9bac310d0e809b00ecc7a79ed2f7c974"
      ],
      "author": {
        "name": "Javier Jardón",
        "email": "jjardon@gnome.org",
        "time": "Sun Aug 23 15:32:41 2026 +0100"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Wed Sep 23 12:44:00 2026 +0200"
      },
      "message": "Add support for Python 3.15\n"
    },
    {
      "commit": "9a93571b9bac310d0e809b00ecc7a79ed2f7c974",
      "tree": "4ae20430c8bf7f10dbc4825d720e9776cf8af75b",
      "parents": [
        "34a935c84ac43f76afd2f5e59baecd8258516d9a"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Sep 11 18:38:10 2026 +0200"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Wed Sep 23 12:44:00 2026 +0200"
      },
      "message": "tox.ini: Update black to version 26.5\n\nThis is required for compatibility with Python 3.15.\n"
    },
    {
      "commit": "34a935c84ac43f76afd2f5e59baecd8258516d9a",
      "tree": "7eeade19d6cc8ed17f2f240a287b3c7c23f4b2f3",
      "parents": [
        "38639582e8e60dd51490cb10f74dbe6f030e51ce"
      ],
      "author": {
        "name": "Javier Jardón",
        "email": "jjardon@gnome.org",
        "time": "Sun Aug 23 16:27:35 2026 +0100"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Wed Sep 23 12:44:00 2026 +0200"
      },
      "message": "Update coverage python package to a version compatible with python 3.15\n"
    },
    {
      "commit": "38639582e8e60dd51490cb10f74dbe6f030e51ce",
      "tree": "34c466f44c04f35588889281beb6ff90a1029775",
      "parents": [
        "94f476e9fbb9a89094b6af59497fc5fcf73f6775"
      ],
      "author": {
        "name": "Javier Jardón",
        "email": "jjardon@gnome.org",
        "time": "Sun Aug 23 16:07:05 2026 +0100"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Wed Sep 23 12:44:00 2026 +0200"
      },
      "message": "Update cibuildwheel to a version compatible with python 3.15\n"
    },
    {
      "commit": "1e0b88e3192469694e470519ebc766d6b58c0a81",
      "tree": "02f0c6757cb28010b3a2e386b61abf9193c4c4b5",
      "parents": [
        "94f476e9fbb9a89094b6af59497fc5fcf73f6775"
      ],
      "author": {
        "name": "Nathan Williams",
        "email": "nathan.williams@codethink.co.uk",
        "time": "Tue Sep 08 12:44:46 2026 +0100"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Wed Sep 23 12:41:43 2026 +0200"
      },
      "message": "Improve documentation on how to use aliases with source plugins\n"
    },
    {
      "commit": "94f476e9fbb9a89094b6af59497fc5fcf73f6775",
      "tree": "582e507b0a23999eac8814f70913e44931ac9aa4",
      "parents": [
        "342f216656b7f1a594cbb78f8f3be686cc136c2f",
        "c050c64aa1c4efdcf57f3981d91b6796a1074e8b"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@apache.org",
        "time": "Thu Sep 17 11:34:46 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 17 11:34:46 2026 +0100"
      },
      "message": "Merge pull request #2193 from apache/abderrahim/2.8.1\n\nNEWS: prepare for 2.8.1"
    },
    {
      "commit": "c050c64aa1c4efdcf57f3981d91b6796a1074e8b",
      "tree": "582e507b0a23999eac8814f70913e44931ac9aa4",
      "parents": [
        "342f216656b7f1a594cbb78f8f3be686cc136c2f"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "abderrahim.kitouni@codethink.co.uk",
        "time": "Wed Sep 16 11:12:11 2026 +0100"
      },
      "committer": {
        "name": "Abderrahim Kitouni",
        "email": "abderrahim.kitouni@codethink.co.uk",
        "time": "Wed Sep 16 11:12:11 2026 +0100"
      },
      "message": "NEWS: prepare for 2.8.1\n"
    },
    {
      "commit": "342f216656b7f1a594cbb78f8f3be686cc136c2f",
      "tree": "70d32800eadaccbac9d988d56e900be459b30ee9",
      "parents": [
        "74ec4927b07438644cb43ed657b0fe96e00249f3",
        "66abd69982868dd51f57954b61ace9c5f0512597"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Tue Sep 15 14:17:10 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 15 14:17:10 2026 +0100"
      },
      "message": "Merge pull request #2192 from apache/jbilleter/tar\n\ntar.py: Always use extraction filter"
    },
    {
      "commit": "66abd69982868dd51f57954b61ace9c5f0512597",
      "tree": "70d32800eadaccbac9d988d56e900be459b30ee9",
      "parents": [
        "12b1f007b875b94d5b34ceeaf4dceb908a2a2a4b"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Sat Aug 29 20:37:52 2026 +0200"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Tue Sep 15 12:10:54 2026 +0100"
      },
      "message": "tests/sources/tar.py: Add symlink escape test\n\nReported-by: Gjoko Krstic \u003cgjoko@zeroscience.mk\u003e\n"
    },
    {
      "commit": "12b1f007b875b94d5b34ceeaf4dceb908a2a2a4b",
      "tree": "a0751f50d17b07fe68123d7af9d41c3f196458f0",
      "parents": [
        "b44b94391aa1ba93c69298f52cb86254f1d0472c"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Aug 28 16:06:59 2026 +0200"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Tue Sep 15 12:10:54 2026 +0100"
      },
      "message": "tar.py: Use custom extraction filter\n\nThe `tar` filter catches attempts to extract files outside the\ndestination directory but does not catch hardlink targets outside the\ndestination directory. The `data` filter catches both but doesn\u0027t\npreserve symlinks, which may break, e.g., rootfs tarball extraction.\n\nDefine a custom extraction filter that uses the `data` filter except for\nsymlinks where the `tar` filter is used.\n\nThis filter replaces the incomplete checks of `_assert_safe()`, which\nwas invoked before extraction, which meant that the checks may already\nhave been outdated during actual extraction.\n"
    },
    {
      "commit": "b44b94391aa1ba93c69298f52cb86254f1d0472c",
      "tree": "fefec510d4eeb75161d4f2835676042ba384d36a",
      "parents": [
        "15be668a9eee4d4e09997f919a514dc8fc182a5d"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Sat Aug 29 18:37:35 2026 +0200"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Tue Sep 15 12:10:54 2026 +0100"
      },
      "message": "tar.py: Use `tar` extraction filter also on Python \u003c 3.12\n\nThis aligns the behavior across Python versions, offering some\nprotection from unusual and possibly malicious tar files. On Python\nversions lower than 3.12, this uses the imported copy of `tarfile.py`.\n"
    },
    {
      "commit": "15be668a9eee4d4e09997f919a514dc8fc182a5d",
      "tree": "bcf60a2a458bf05a4a042f9767f338462ed240d4",
      "parents": [
        "17981c35bc8afb06555349a75be2de83fd423bea"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Sat Aug 29 17:59:41 2026 +0200"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Tue Sep 15 12:10:54 2026 +0100"
      },
      "message": "_tarfile.py: Do not require `os.path.ALLOW_MISSING`\n\nThis was introduced in Python 3.14. While it was also backported to\nolder versions, the backport may not be available everywhere.\n"
    },
    {
      "commit": "17981c35bc8afb06555349a75be2de83fd423bea",
      "tree": "3bc9da3395f44c52b50baf70f41538ac68799d0a",
      "parents": [
        "74ec4927b07438644cb43ed657b0fe96e00249f3"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Sat Aug 29 11:23:19 2026 +0200"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Tue Sep 15 12:10:54 2026 +0100"
      },
      "message": "Import tarfile.py from Python 3.11.16\n\nThe `tarfile` extraction filter support from Python 3.12 was backported\nto older Python releases. However, distro packages of Python \u003c 3.12 may\nnot include that backport. Import the latest upstream version to be able\nto use extraction filters on all Python versions.\n"
    },
    {
      "commit": "74ec4927b07438644cb43ed657b0fe96e00249f3",
      "tree": "e39440af784d36223d9b852832dd3e2ec2d0803f",
      "parents": [
        "642fd68c3e34fd315bb03b4a353a5c29bcca7aca",
        "0263fe77b3daa7939f5323474cfefd06453de9bd"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Mon Sep 14 10:54:27 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 10:54:27 2026 +0200"
      },
      "message": "Merge pull request #2191 from apache/jbilleter/expiry-tests\n\ntests/artifactcache/expiry.py: Tweak tests for buildbox-casd update"
    },
    {
      "commit": "0263fe77b3daa7939f5323474cfefd06453de9bd",
      "tree": "e39440af784d36223d9b852832dd3e2ec2d0803f",
      "parents": [
        "642fd68c3e34fd315bb03b4a353a5c29bcca7aca"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Sun Sep 13 09:27:51 2026 +0200"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Sun Sep 13 09:27:51 2026 +0200"
      },
      "message": "tests/artifactcache/expiry.py: Tweak tests for buildbox-casd update\n\nbuildbox-casd 1.4.23+ triggers LRU expiry on a cleanup threshold below\nthe quota to avoid blocking writes during cleanup.\n\nThe expiry tests were relying on LRU expiry implementation details that\nno longer hold. This tweaks a few parameters to pass the tests with the\nlatest and older versions of buildbox-casd.\n\nhttps://gitlab.com/BuildGrid/buildbox/buildbox/-/merge_requests/1204\n"
    },
    {
      "commit": "642fd68c3e34fd315bb03b4a353a5c29bcca7aca",
      "tree": "021a95f0aa5129d69ad771e0417d7aaa4faa3982",
      "parents": [
        "a789ff42a976237ab9d89332e33b07520a44c911",
        "857681c59a3aa83252cd50d17d57b50fccc82d39"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@apache.org",
        "time": "Sat Sep 12 11:57:19 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Sep 12 11:57:19 2026 +0100"
      },
      "message": "Merge pull request #2172 from kotborealis/perf/cache-cas-optimizations\n\nreduce redundant artifact, CAS, and cache-key work"
    },
    {
      "commit": "a789ff42a976237ab9d89332e33b07520a44c911",
      "tree": "5d93b82672232c7e43fd592fa1c1e3982e5fe348",
      "parents": [
        "c5e4d83388eee1001d0b28d7fbe973286fb365bb",
        "cb37723a7663839e961ba4ce48c8ff62c9ec8748"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Sep 11 11:35:22 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 11 11:35:22 2026 +0200"
      },
      "message": "Merge pull request #2189 from nathanwilliams-ct/nathan/sourcetests-track\n\n_sourcetests: fetch missing after tracking"
    },
    {
      "commit": "cb37723a7663839e961ba4ce48c8ff62c9ec8748",
      "tree": "5d93b82672232c7e43fd592fa1c1e3982e5fe348",
      "parents": [
        "c5e4d83388eee1001d0b28d7fbe973286fb365bb"
      ],
      "author": {
        "name": "Nathan Williams",
        "email": "nathan.williams@codethink.co.uk",
        "time": "Wed Sep 09 11:51:53 2026 +0100"
      },
      "committer": {
        "name": "Nathan Williams",
        "email": "nathan.williams@codethink.co.uk",
        "time": "Thu Sep 10 10:09:49 2026 +0100"
      },
      "message": "_sourcetests: fetch missing after tracking\n\nOver in: https://gitlab.com/BuildStream/buildstream-plugins-community/-/merge_requests/484\nWe hit: FAILED\n`buildstream/_testing/_sourcetests/track.py::test_cross_junction[git_repo-project.refs] -\nAssertionError: assert \u0027fetch needed\u0027 \u003d\u003d \u0027buildable\u0027`\n\nLooking at the other tests in this file,\nall except this one have the \u0027# And now fetch it:` comment and call a call to bst fetch.\n\nIt looks like it\u0027s missing in this test.\n\nAs `git_repo` does not cache it\u0027s sources as part of track.\n"
    },
    {
      "commit": "c5e4d83388eee1001d0b28d7fbe973286fb365bb",
      "tree": "19fa7bcfb4ee2b53fe3cde083592070d7c09aa24",
      "parents": [
        "a44bca594a933ec68ef26b51a10e01852dc75df5",
        "1a2869fe6062f3bbdfd001abe457d8f44601c557"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@apache.org",
        "time": "Wed Sep 02 11:05:48 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 11:05:48 2026 +0100"
      },
      "message": "Merge pull request #2187 from aleixpol/aleixpol/refs-not-strings\n\n_sourcetests: Do not assume Source.ref is a string"
    },
    {
      "commit": "1a2869fe6062f3bbdfd001abe457d8f44601c557",
      "tree": "19fa7bcfb4ee2b53fe3cde083592070d7c09aa24",
      "parents": [
        "a44bca594a933ec68ef26b51a10e01852dc75df5"
      ],
      "author": {
        "name": "Aleix Pol i Gonzalez",
        "email": "aleixpol@kde.org",
        "time": "Wed Sep 02 02:13:35 2026 +0200"
      },
      "committer": {
        "name": "Aleix Pol i Gonzalez",
        "email": "aleixpol@kde.org",
        "time": "Wed Sep 02 11:13:44 2026 +0200"
      },
      "message": "_sourcetests: Do not assume Source.ref is a string\n\ntypes.py specifies as:\nSourceRef \u003d Union[None, int, str, List[Any], Dict[str, Any]]\n"
    },
    {
      "commit": "a44bca594a933ec68ef26b51a10e01852dc75df5",
      "tree": "96f5315862aefb7b419b5a8d05844319c10a39dd",
      "parents": [
        "fa315b630794af72acc11b7f6f83b2d3ac9b239e",
        "fff52c1f5d90abb9c92f70a10ca1b5ec65deea05"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@apache.org",
        "time": "Tue Sep 01 17:15:06 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 17:15:06 2026 +0100"
      },
      "message": "Merge pull request #2173 from nathanwilliams-ct/patch-1\n\nElement dependencies: Improve inline documentation to make it clear that deps of  _Scope.BUILD don\u0027t return self"
    },
    {
      "commit": "fa315b630794af72acc11b7f6f83b2d3ac9b239e",
      "tree": "e3ba58633d273d381b311ecd8aa017bdcbb79bda",
      "parents": [
        "4bd905bc8d6364f06b279f470a154aa917ed0656",
        "7820ba1f8a964c401b57aa3edcb3c0a5324c0712"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@apache.org",
        "time": "Tue Sep 01 17:13:48 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 17:13:48 2026 +0100"
      },
      "message": "Merge pull request #2166 from kotborealis/fix/workspace-soft-reset-persistence\n\n_stream: Persist soft workspace resets"
    },
    {
      "commit": "7820ba1f8a964c401b57aa3edcb3c0a5324c0712",
      "tree": "e3ba58633d273d381b311ecd8aa017bdcbb79bda",
      "parents": [
        "4bd905bc8d6364f06b279f470a154aa917ed0656"
      ],
      "author": {
        "name": "kotborealis",
        "email": "kotborealis@awooo.ru",
        "time": "Tue Aug 11 12:17:08 2026 +0300"
      },
      "committer": {
        "name": "kotborealis",
        "email": "kotborealis@awooo.ru",
        "time": "Tue Sep 01 16:59:29 2026 +0300"
      },
      "message": "_stream: Persist soft workspace resets\n\nThe soft reset path cleared workspace.last_build only in memory. Since workspace_reset() returned without Workspaces.save_config(), the old hash remained in .bst2/workspaces.yml and was loaded by the next BuildStream invocation. That retained the previous buildtree and could skip configure-commands.\n\nThis regressed in 1eedab4fd, when the final save after the reset loop was removed as hard reset moved to workspace_close()/workspace_open(); those methods save the config themselves, but the soft path does not. The later last_successful -\u003e last_build rename preserved the omission.\n\nSave the config once after all soft-reset targets are processed and cover the on-disk state before and after a new CLI invocation.\n"
    },
    {
      "commit": "4bd905bc8d6364f06b279f470a154aa917ed0656",
      "tree": "97a20b91dae062ec2ba666897138cd0eda546719",
      "parents": [
        "b8ce3ff5ac16f3e9b23af4c2534f1c7fb00f0588",
        "e86ce4f62ffdc0a3f5263556c8ad3fc5d55f384e"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Aug 28 10:47:15 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 28 10:47:15 2026 +0200"
      },
      "message": "Merge pull request #2163 from jjardon/jjardon/modernize_project_toml\n\nMove static metadata from setup.py/setup.cfg into pyproject.toml"
    },
    {
      "commit": "e86ce4f62ffdc0a3f5263556c8ad3fc5d55f384e",
      "tree": "97a20b91dae062ec2ba666897138cd0eda546719",
      "parents": [
        "b8ce3ff5ac16f3e9b23af4c2534f1c7fb00f0588"
      ],
      "author": {
        "name": "Javier Jardón",
        "email": "jjardon@gnome.org",
        "time": "Thu Aug 06 00:16:57 2026 +0100"
      },
      "committer": {
        "name": "Javier Jardón",
        "email": "jjardon@gnome.org",
        "time": "Thu Aug 27 18:57:35 2026 +0100"
      },
      "message": "Move static metadata from setup.py/setup.cfg into pyproject.toml\n\nMove the static project metadata that can be expressed with PEP 621\ninto the [project] table of pyproject.toml and remove the corresponding\nduplicated arguments from setup() and the python_requires line from\nsetup.cfg.\n"
    },
    {
      "commit": "b8ce3ff5ac16f3e9b23af4c2534f1c7fb00f0588",
      "tree": "300e310a337c5eb32eaf8a4dcbb1b5c47842e8e3",
      "parents": [
        "979d31ae9861e8ec1d0a42a7889ce98c78d821f0",
        "66192ea801da2e00df52113667e7ddd030c380be"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@apache.org",
        "time": "Thu Aug 27 18:30:35 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 27 18:30:35 2026 +0100"
      },
      "message": "Merge pull request #2164 from apache/jbilleter/black\n\npyproject.toml: Set `target-version` for `black` and reformat"
    },
    {
      "commit": "979d31ae9861e8ec1d0a42a7889ce98c78d821f0",
      "tree": "ca5fac930ae86b61f5c254e06c847f99ba931c54",
      "parents": [
        "5043f23c7e08155f04414b4a09a6fcebd18a950b",
        "9bc9f84be5b4e437228145ffd0a7892b609aa313"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Sun Aug 23 20:00:42 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 23 20:00:42 2026 +0200"
      },
      "message": "Merge pull request #2179 from jjardon/jjardon/f44\n\nci: Add Fedora 44, remove other Fedora images"
    },
    {
      "commit": "9bc9f84be5b4e437228145ffd0a7892b609aa313",
      "tree": "ea6f9f0b7019934dcb576ca1dd1a46b23aa9449d",
      "parents": [
        "78ffa27790d6c706f4ede57dbbe8e279165923a9"
      ],
      "author": {
        "name": "Javier Jardón",
        "email": "jjardon@gnome.org",
        "time": "Sun Aug 23 14:52:09 2026 +0100"
      },
      "committer": {
        "name": "Javier Jardón",
        "email": "jjardon@gnome.org",
        "time": "Sun Aug 23 14:54:42 2026 +0100"
      },
      "message": "tests: set TERM for interactive pexpect sessions\n\nInteractive tests allocate a PTY via pexpect but inherit the process\nenvironment. When TERM is unset or \"dumb\" (common in CI containers),\nclick.echo_via_pager does not run an interactive less; the test still\nsends \"q\" as if a pager were active, which is then read as choice\n\"quit\". This happened in the new fedora 44 image, for example\n\nEnsure a usable TERM in the build_session fixture so pager-driven\ntests behave like a normal interactive terminal.\n"
    },
    {
      "commit": "78ffa27790d6c706f4ede57dbbe8e279165923a9",
      "tree": "a9e2f277f2db80f1bb4b0548c441e9e707569919",
      "parents": [
        "97d5e4a5c155b42c4b560529e110509f3500acac"
      ],
      "author": {
        "name": "Javier Jardón",
        "email": "jjardon@gnome.org",
        "time": "Thu Aug 20 23:17:23 2026 +0100"
      },
      "committer": {
        "name": "Javier Jardón",
        "email": "jjardon@gnome.org",
        "time": "Sun Aug 23 14:54:42 2026 +0100"
      },
      "message": "ci: Add Fedora 44, remove other Fedora images\n\nFedora 42 is EOL for a while, python 3.14 is already tested with F44\n"
    },
    {
      "commit": "5043f23c7e08155f04414b4a09a6fcebd18a950b",
      "tree": "044765c3e3cfeeaf979cf52c17ea2e84c1ff4ba0",
      "parents": [
        "97d5e4a5c155b42c4b560529e110509f3500acac",
        "ef554520b12af8034abb2a4efbfa87a6862f6ce9"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@apache.org",
        "time": "Sun Aug 23 11:53:33 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 23 11:53:33 2026 +0100"
      },
      "message": "Merge pull request #2181 from jjardon/jjardon/ci_updates\n\nci: update GitHub Actions to current major versions"
    },
    {
      "commit": "ef554520b12af8034abb2a4efbfa87a6862f6ce9",
      "tree": "044765c3e3cfeeaf979cf52c17ea2e84c1ff4ba0",
      "parents": [
        "97d5e4a5c155b42c4b560529e110509f3500acac"
      ],
      "author": {
        "name": "Javier Jardón",
        "email": "jjardon@gnome.org",
        "time": "Sat Aug 22 20:12:01 2026 +0100"
      },
      "committer": {
        "name": "Javier Jardón",
        "email": "jjardon@gnome.org",
        "time": "Sat Aug 22 20:12:18 2026 +0100"
      },
      "message": "ci: update GitHub Actions to current major versions\n\n- actions/checkout: v2/v3 → v7 (Node 24 runtime, fixes deprecation)\n- actions/upload-artifact: v4 → v7\n- actions/download-artifact: v4 → v8\n\nThis eliminates the Node 20 deprecation warnings and the associated\npunycode warnings.\n"
    },
    {
      "commit": "fff52c1f5d90abb9c92f70a10ca1b5ec65deea05",
      "tree": "e392bd696c35498812cb3eabd7e06e403c872dec",
      "parents": [
        "97d5e4a5c155b42c4b560529e110509f3500acac"
      ],
      "author": {
        "name": "Idris",
        "email": "nathan.williams@codethink.co.uk",
        "time": "Wed Aug 12 16:16:08 2026 +0100"
      },
      "committer": {
        "name": "Nathan Williams",
        "email": "nathan.williams@codethink.co.uk",
        "time": "Tue Aug 18 08:51:37 2026 +0100"
      },
      "message": "element.py: Document visit of the recursive _dependencies method\n\nThis makes it clear that _Scope.BUILD not yeilding element is intentional\n"
    },
    {
      "commit": "857681c59a3aa83252cd50d17d57b50fccc82d39",
      "tree": "911ef08c2c6ce2b05e63236a1a585ed9e7163a4b",
      "parents": [
        "b69c6835275812ad5e88c2088e451b2037d9b8af"
      ],
      "author": {
        "name": "kotborealis",
        "email": "kotborealis@awooo.ru",
        "time": "Wed Aug 12 17:20:22 2026 +0300"
      },
      "committer": {
        "name": "kotborealis",
        "email": "kotborealis@awooo.ru",
        "time": "Mon Aug 17 16:40:00 2026 +0300"
      },
      "message": "element: Reuse build dependencies for cache keys\n\nWeak and strict cache keys both consume the same build dependency list. Materialize the generator once and reuse it so cache-key updates do not traverse the dependency graph twice while preserving the existing key inputs and ordering.\n"
    },
    {
      "commit": "b69c6835275812ad5e88c2088e451b2037d9b8af",
      "tree": "6165c636be9a7323f6a30873caf5157fb056065c",
      "parents": [
        "a5a1e0493ba3c5fa8ec9c2b44432af68490c1d1f"
      ],
      "author": {
        "name": "kotborealis",
        "email": "kotborealis@awooo.ru",
        "time": "Wed Aug 12 17:20:22 2026 +0300"
      },
      "committer": {
        "name": "kotborealis",
        "email": "kotborealis@awooo.ru",
        "time": "Mon Aug 17 16:40:00 2026 +0300"
      },
      "message": "_cas: Avoid duplicate directory tree fetch\n\nfetch_directory() has already fetched the directory protos with FetchTree before enumerating required blobs. Tell required_blobs_for_directory() to reuse those local protos instead of issuing another FetchTree request, reducing remote CAS round trips.\n"
    },
    {
      "commit": "a5a1e0493ba3c5fa8ec9c2b44432af68490c1d1f",
      "tree": "91bfd414c10fc302edaf531b6d9ba823782eca81",
      "parents": [
        "97d5e4a5c155b42c4b560529e110509f3500acac"
      ],
      "author": {
        "name": "kotborealis",
        "email": "kotborealis@awooo.ru",
        "time": "Wed Aug 12 17:20:21 2026 +0300"
      },
      "committer": {
        "name": "kotborealis",
        "email": "kotborealis@awooo.ru",
        "time": "Mon Aug 17 16:40:00 2026 +0300"
      },
      "message": "_artifact: Remove unused output size traversal\n\nArtifact.cache() already stores the collected directory digest and never uses the recursive size calculation that follows it. Remove the dead accumulator and _get_size() call so artifact creation does not walk the output tree a second time.\n"
    },
    {
      "commit": "97d5e4a5c155b42c4b560529e110509f3500acac",
      "tree": "3e26486d8f5c11e911dfef69f6abdc04913f0bf2",
      "parents": [
        "2da1391a414b9e184daf40c740b106240cf84d8d",
        "6acb07a5f6bc5ac426655858e7b26c28359be1eb"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Mon Aug 17 15:28:05 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 15:28:05 2026 +0200"
      },
      "message": "Merge pull request #2175 from apache/jbilleter/2.8\n\n _frontend/cli.py: Update default min-version for `bst init`"
    },
    {
      "commit": "6acb07a5f6bc5ac426655858e7b26c28359be1eb",
      "tree": "3e26486d8f5c11e911dfef69f6abdc04913f0bf2",
      "parents": [
        "2da1391a414b9e184daf40c740b106240cf84d8d"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Mon Aug 17 14:53:01 2026 +0200"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Mon Aug 17 14:53:01 2026 +0200"
      },
      "message": " _frontend/cli.py: Update default min-version for `bst init`\n\nThis is implicitly required by tests after creating the 2.8.0.dev0 tag.\n"
    },
    {
      "commit": "66192ea801da2e00df52113667e7ddd030c380be",
      "tree": "91fb9028cf5f7b1a3a29cbfaa4be07c819ea21de",
      "parents": [
        "2da1391a414b9e184daf40c740b106240cf84d8d"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Aug 07 15:47:08 2026 +0200"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Aug 07 15:47:08 2026 +0200"
      },
      "message": "pyproject.toml: Set `target-version` for `black` and reformat\n"
    },
    {
      "commit": "2da1391a414b9e184daf40c740b106240cf84d8d",
      "tree": "8a524f2202f8a9bb5d03d383c87a8f6c27ba5d61",
      "parents": [
        "14bfcbab03f203804b7412371e476a38d3e5dc65",
        "8961c01348aab62a40a3de1eb2052380820f9486"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@apache.org",
        "time": "Fri Aug 07 10:33:33 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 07 10:33:33 2026 +0100"
      },
      "message": "Merge pull request #2162 from apache/abderrahim/2.8\n\nNEWS: prepare for 2.8.0"
    },
    {
      "commit": "8961c01348aab62a40a3de1eb2052380820f9486",
      "tree": "8a524f2202f8a9bb5d03d383c87a8f6c27ba5d61",
      "parents": [
        "14bfcbab03f203804b7412371e476a38d3e5dc65"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "abderrahim.kitouni@codethink.co.uk",
        "time": "Wed Aug 05 16:43:52 2026 +0100"
      },
      "committer": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@gnome.org",
        "time": "Fri Aug 07 09:37:10 2026 +0100"
      },
      "message": "NEWS: prepare for 2.8.0\n"
    },
    {
      "commit": "14bfcbab03f203804b7412371e476a38d3e5dc65",
      "tree": "10c81293cdbd268e64065ed9e7dbc3bd001c197f",
      "parents": [
        "344cac63ad410cf311b76b89df5218a60b323406",
        "5540bd603062d5672779e099f8af875525338314"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@apache.org",
        "time": "Fri Aug 07 09:33:28 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 07 09:33:28 2026 +0100"
      },
      "message": "Merge pull request #2104 from apache/abderrahim/dynamic-session-elements\n\nCorrectly track session elements in dynamic build plan"
    },
    {
      "commit": "5540bd603062d5672779e099f8af875525338314",
      "tree": "10c81293cdbd268e64065ed9e7dbc3bd001c197f",
      "parents": [
        "344cac63ad410cf311b76b89df5218a60b323406"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "abderrahim.kitouni@codethink.co.uk",
        "time": "Fri Feb 06 12:10:15 2026 +0000"
      },
      "committer": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@gnome.org",
        "time": "Thu Aug 06 22:08:13 2026 +0100"
      },
      "message": "Correctly track session elements in dynamic build plan\n\nWhen using a dynamic build plan, all elements are passed to the queue\nto be enqueued, but are only actually enqueued when they become\nrequired.\n\nThis moves the tracking of session elements to the first queue rather\nthan just take everything that we pass to the queue (which would be\nall elements).\n\nThis also makes session_elements a set rather than a list since an\nelement can be enqueued more than once (e.g. if it is retried).\n\nThis is only used in the UI, and doesn\u0027t actually affect the build.\n"
    },
    {
      "commit": "344cac63ad410cf311b76b89df5218a60b323406",
      "tree": "1b975eff1738a500bb8e14dd382ae1f4730a977c",
      "parents": [
        "7f2932c14d3be239fadc5423aee8f0753e8c3542",
        "7a79c78a62689c3cc107af60c988be98acbbb240"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@apache.org",
        "time": "Thu Aug 06 22:07:26 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 06 22:07:26 2026 +0100"
      },
      "message": "Merge pull request #2160 from apache/abderrahim/pull-push-hang\n\n_cas: avoid blocking calls to long grpc methods"
    },
    {
      "commit": "7a79c78a62689c3cc107af60c988be98acbbb240",
      "tree": "1b975eff1738a500bb8e14dd382ae1f4730a977c",
      "parents": [
        "7f2932c14d3be239fadc5423aee8f0753e8c3542"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "abderrahim.kitouni@codethink.co.uk",
        "time": "Mon Aug 03 16:00:03 2026 +0100"
      },
      "committer": {
        "name": "Abderrahim Kitouni",
        "email": "abderrahim.kitouni@codethink.co.uk",
        "time": "Thu Aug 06 15:55:46 2026 +0100"
      },
      "message": "_cas: avoid blocking calls to long grpc methods\n\nLong-running synchronous grpc calls block the thread where they are\ncalled, which can cause the scheduler to be unable to terminate the\njob.\n\nThis commit replaces them with usage of the \"asynchronous\" future\nAPI. The result() method of a grpc future will not block the thread\nwhile it\u0027s waiting, and thus allows terminating the job without\nwaiting for the blocking call to return. This covers the LocalCAS\nmethods {Fetch,Upload}{Tree,MissingBlobs}, and the CAS method\nFindMissingBlobs.\n\nAs an added benefit, we try to cancel the grpc calls when\nterminated. This depends on the server side (buildbox-casd) promptly\ncancelling the remote calls, which it doesn\u0027t consistently do at the\nmoment. But that can be fixed independently.\n\nFixes https://github.com/apache/buildstream/issues/2157\n"
    },
    {
      "commit": "7f2932c14d3be239fadc5423aee8f0753e8c3542",
      "tree": "12dab3727049793387480594238c2c0192ffb69d",
      "parents": [
        "7998fbf0052d2a5cd0261605d5197eceaf22cdcb",
        "bd88a207f97ccfc5c5dddd1ecbd7c609a0de1001"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@apache.org",
        "time": "Thu Aug 06 15:55:25 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 06 15:55:25 2026 +0100"
      },
      "message": "Merge pull request #2161 from apache/abderrahim/examples\n\nexamples: use ftp.gnu.org instead of ftpmirror.gnu.org"
    },
    {
      "commit": "bd88a207f97ccfc5c5dddd1ecbd7c609a0de1001",
      "tree": "12dab3727049793387480594238c2c0192ffb69d",
      "parents": [
        "7998fbf0052d2a5cd0261605d5197eceaf22cdcb"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "abderrahim.kitouni@codethink.co.uk",
        "time": "Wed Aug 05 17:06:00 2026 +0100"
      },
      "committer": {
        "name": "Abderrahim Kitouni",
        "email": "abderrahim.kitouni@codethink.co.uk",
        "time": "Thu Aug 06 15:01:41 2026 +0100"
      },
      "message": "examples: Use ftp.gnu.org instead of ftpmirror.gnu.org\n\nThe latter has been unreliable recently, it is still kept but moved to\na be mirror instead. This way it\u0027s still tried first, but falls back\nto ftp.gnu.org.\n"
    },
    {
      "commit": "7998fbf0052d2a5cd0261605d5197eceaf22cdcb",
      "tree": "790f66d141c5d4d8c517044f85a0083e4c4a002c",
      "parents": [
        "ad6b437d760df8b3a8cdb151bd3da93ca3a77006",
        "f1f79c845862a422b7de3cd5540b6217621bb309"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@apache.org",
        "time": "Tue Aug 04 12:22:58 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 12:22:58 2026 +0100"
      },
      "message": "Merge pull request #1941 from apache/abderrahim/junction-remotes\n\n_context: use artifact caches from the parent project for junctions"
    },
    {
      "commit": "f1f79c845862a422b7de3cd5540b6217621bb309",
      "tree": "b935eed8276a904d168d71357d63672c232bf94a",
      "parents": [
        "7247e0a0d0be98e5656c6bd6641d1196e458d364"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "abderrahim.kitouni@codethink.co.uk",
        "time": "Fri Aug 02 11:51:49 2024 +0100"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Jul 31 17:07:17 2026 +0200"
      },
      "message": "_context: use artifact caches from the parent project for junctions\n\nThis makes a junction use the artifact cache of the parent project\nbefore the ones defined for the junction\n\nThis was originally done in 24c0de16faec2b8b9bd6a03504ce951dc49afbe2,\nbut regressed at some point\n\nFixes https://github.com/apache/buildstream/issues/1839\n"
    },
    {
      "commit": "ad6b437d760df8b3a8cdb151bd3da93ca3a77006",
      "tree": "d26c2c0d17d9bd8aad76de5b5fe23c8df2292d9a",
      "parents": [
        "7247e0a0d0be98e5656c6bd6641d1196e458d364",
        "6115da15640c911f71a85bd62eacf07f8251d1e5"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Tue Jul 28 18:33:42 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 18:33:42 2026 +0200"
      },
      "message": "Merge pull request #2153 from nathanwilliams-ct/nathan/enum-static-type-checking\n\nStatic Type Checking: Enums"
    },
    {
      "commit": "7247e0a0d0be98e5656c6bd6641d1196e458d364",
      "tree": "bfde75a6f8517a100a39bd5cd7d6ce5e1c9cead8",
      "parents": [
        "ff482ab68db72cd1790b3da8639f3e40dcda2021",
        "6b3f696fe75127896554c782e40d6b86243a42fe"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Jul 24 16:34:22 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 16:34:22 2026 +0200"
      },
      "message": "Merge pull request #2155 from apache/jbilleter/docs\n\ndoc: Escape `--` for CLI options in `:ref:`"
    },
    {
      "commit": "ff482ab68db72cd1790b3da8639f3e40dcda2021",
      "tree": "42347ddddb2ee27b088ed1d4384cf7615e25cae3",
      "parents": [
        "094a36df9de789d5e166748c200a3404d7144dbb",
        "43220900ed3be9a29b67e4944ce32ab659a6f3ef"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Jul 24 16:24:58 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 16:24:58 2026 +0200"
      },
      "message": "Merge pull request #2137 from kotborealis/bst-reset-either\n\nfix: make `workspace reset` accept either `--all` or elements list"
    },
    {
      "commit": "6b3f696fe75127896554c782e40d6b86243a42fe",
      "tree": "6cf1b5c22a9c9ffac4c9347abdda768e0b21655a",
      "parents": [
        "094a36df9de789d5e166748c200a3404d7144dbb"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Jul 24 15:11:07 2026 +0200"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Jul 24 15:32:49 2026 +0200"
      },
      "message": "doc: Escape `--` for CLI options in `:ref:`\n\nEscaping with many backslashes prevents the Smart Quotes transform to\nen-dashes. See https://github.com/sphinx-doc/sphinx/issues/11492.\n\nReported-by: kotborealis \u003ckotborealis@awooo.ru\u003e\n"
    },
    {
      "commit": "43220900ed3be9a29b67e4944ce32ab659a6f3ef",
      "tree": "5d62d0fd637cd0d0155fd82f7300b835ddfa7989",
      "parents": [
        "bbbe58144a53625296b702f95cbc0f0d3b450529"
      ],
      "author": {
        "name": "kotborealis",
        "email": "kotborealis@awooo.ru",
        "time": "Sun Jul 19 17:15:06 2026 +0300"
      },
      "committer": {
        "name": "kotborealis",
        "email": "kotborealis@awooo.ru",
        "time": "Sun Jul 19 17:15:18 2026 +0300"
      },
      "message": "fix: make `workspace reset` accept either `--all` or elements list\n"
    },
    {
      "commit": "094a36df9de789d5e166748c200a3404d7144dbb",
      "tree": "1f41a112ee3f4c7427bdcbd3e92e8deb63ac6e12",
      "parents": [
        "a5cf91a82bed12d29bd9562c5dd8578283f56cad",
        "3d91c562f13994f694754a605c99b329a411d9c8"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@apache.org",
        "time": "Sun Jul 19 13:36:04 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 19 13:36:04 2026 +0200"
      },
      "message": "Merge pull request #2152 from apache/abderrahim/casd-cached-failures\n\ncasdprocessmanager: pass --cache-failures\u003dfalse to casd"
    },
    {
      "commit": "6115da15640c911f71a85bd62eacf07f8251d1e5",
      "tree": "0a2534fd5789184b565791f4a5d74b4a8074ec3e",
      "parents": [
        "6a3af2624397bd385f02e37efbdc819d88c892f2"
      ],
      "author": {
        "name": "Nathan Williams",
        "email": "nathan.williams@codethink.co.uk",
        "time": "Mon Jul 13 16:39:54 2026 +0100"
      },
      "committer": {
        "name": "Nathan Williams",
        "email": "nathan.williams@codethink.co.uk",
        "time": "Fri Jul 17 10:00:53 2026 +0100"
      },
      "message": "docs: Add details about static type checking\n"
    },
    {
      "commit": "6a3af2624397bd385f02e37efbdc819d88c892f2",
      "tree": "a25ce06f20626b7e324e0ad42e945a2d00a2231d",
      "parents": [
        "1c6730047356fbcd9a60a283f39828b1ed6fc22f"
      ],
      "author": {
        "name": "Nathan Williams",
        "email": "nathan.williams@codethink.co.uk",
        "time": "Mon Jul 13 16:38:12 2026 +0100"
      },
      "committer": {
        "name": "Nathan Williams",
        "email": "nathan.williams@codethink.co.uk",
        "time": "Fri Jul 17 10:00:52 2026 +0100"
      },
      "message": "Static Type Checking: Enums\n\nBuildstream implements a custom `FastEnum`[1].\nmypy only supports `enum.Enum` (and it\u0027s official variations) when it comes to doing static type checks on enums [2].\nWe can\u0027t subclass Enum in FastEnum to make mypy happy, because Enum doesn\u0027t allow subclassing [3].\nSo we end up with a bunch of `str`, `int` etc around the codebase,\ninstead of the appropriate Enum classes like `OverlapAction` or `_Scope` which are usually recorded separately in the doc strings.\nThis means we don\u0027t get proper static type checking on our Enums :( .\nWith stub files [4][5] we can lie to mypy about what type the Enum classes are[6],\nso the type hints around the codebase are now correct be corrected.\nNow we can have proper static type checking on the custom Enums, Yay!\n\nSo\n\n```\nclass OverlapAction(FastEnum):\n    ERROR: str\n    WARNING: str\n    IGNORE: str\n```\n\ngets stubbed as\n\n```\nfrom enum import Enum\nclass OverlapAction(Enum):\n    ERROR: str\n    WARNING: str\n    IGNORE: str\n```\n\n[1] src/buildstream/types.py#L32\n[2] https://mypy.readthedocs.io/en/stable/literal_types.html#enums\n[3] https://docs.python.org/3/howto/enum.html#restricted-enum-subclassing\n[4] https://typing.python.org/en/latest/guides/writing_stubs.html\n[5] https://mypy.readthedocs.io/en/stable/stubgen.html\n[6] https://github.com/python/mypy/issues/3217\n"
    },
    {
      "commit": "3d91c562f13994f694754a605c99b329a411d9c8",
      "tree": "1f41a112ee3f4c7427bdcbd3e92e8deb63ac6e12",
      "parents": [
        "a5cf91a82bed12d29bd9562c5dd8578283f56cad"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "abderrahim.kitouni@codethink.co.uk",
        "time": "Tue Jul 14 15:48:45 2026 +0100"
      },
      "committer": {
        "name": "Abderrahim Kitouni",
        "email": "abderrahim.kitouni@codethink.co.uk",
        "time": "Tue Jul 14 15:49:09 2026 +0100"
      },
      "message": "casdprocessmanager: pass --cache-failures\u003dfalse to casd\n\nWhen don\u0027t want buildbox-casd to cache failed actions, as they may be\ndue to e.g. hitting resource limits rather than genuine failures\n\nThis also bumps the minimum required version of buildbox-casd to\n1.3.41, which introduced this feature.\n\nFixes https://github.com/apache/buildstream/issues/2149\n"
    },
    {
      "commit": "a5cf91a82bed12d29bd9562c5dd8578283f56cad",
      "tree": "b5eb6a75630f9f3e608dc35af090b030fea95ed5",
      "parents": [
        "1c6730047356fbcd9a60a283f39828b1ed6fc22f",
        "7967a1613897bba862f94fe9b134137d9af9c04b"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Tue Jul 14 16:21:21 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 14 16:21:21 2026 +0200"
      },
      "message": "Merge pull request #2139 from tti0/tti0/repr-impl-docs\n\nFastEnum: implement __str__ and __repr__ to match StrEnum for docs reproducibility"
    },
    {
      "commit": "7967a1613897bba862f94fe9b134137d9af9c04b",
      "tree": "b5eb6a75630f9f3e608dc35af090b030fea95ed5",
      "parents": [
        "153ea04e3274cd939901594ab3f41679329c27bd"
      ],
      "author": {
        "name": "Theodore Tucker",
        "email": "theodore@tti0.net",
        "time": "Sat Jul 11 17:00:00 2026 +0100"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Mon Jul 13 16:01:19 2026 +0200"
      },
      "message": "cli: stringify FastEnum\u0027s passed as Click defaults\n\nThis should mean the StrEnum-style repr is used by sphinx-click when\nrendering the default in documentation, resulting in `all` rather than\n`\u003cbuildstream.types._PipelineSelection object at 0xabc\u003e`.\n"
    },
    {
      "commit": "153ea04e3274cd939901594ab3f41679329c27bd",
      "tree": "b392d86b4800b1256d76ff0959d07e142e1bd485",
      "parents": [
        "1c6730047356fbcd9a60a283f39828b1ed6fc22f"
      ],
      "author": {
        "name": "Theodore Tucker",
        "email": "theodore@tti0.net",
        "time": "Sat Jul 11 16:57:16 2026 +0100"
      },
      "committer": {
        "name": "Theodore Tucker",
        "email": "theodore@tti0.net",
        "time": "Mon Jul 13 14:56:40 2026 +0100"
      },
      "message": "FastEnum: update __repr__ and __str__ to behave like StrEnum\n\nThis means we can drop the redundant __str__ implementation on\nthe subclass _PipelineSelection.\n"
    },
    {
      "commit": "1c6730047356fbcd9a60a283f39828b1ed6fc22f",
      "tree": "81481c1c6b49903710d0c8f3d58e165d3143bb85",
      "parents": [
        "f0c7edd69235f71bfca987920140769cc101a5d0",
        "caf012e6ec68c2763b74cb7e2470adbba396f317"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Jul 10 15:15:19 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 15:15:19 2026 +0200"
      },
      "message": "Merge pull request #2146 from nathanwilliams-ct/nathan/questions\n\nREADME.rst: Update communication channels"
    },
    {
      "commit": "f0c7edd69235f71bfca987920140769cc101a5d0",
      "tree": "b53938dce40d7a08c2ed4fbfd86b82fa84ba2fd9",
      "parents": [
        "c24c132738b9f066929d4c5106278420bdac3296",
        "042523a96865c81767d13d244a30aea0f4553132"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Jul 10 15:11:53 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 15:11:53 2026 +0200"
      },
      "message": "Merge pull request #2126 from apache/jbilleter/doc-buildelement-buildsteps\n\ndoc/source/core_buildelement.rst: Add \u0027Build steps\u0027 section"
    },
    {
      "commit": "c24c132738b9f066929d4c5106278420bdac3296",
      "tree": "498886e32d0398ffbc5a9adefd5aa65dd9bc636a",
      "parents": [
        "bbbe58144a53625296b702f95cbc0f0d3b450529",
        "4a2fe3783beffe91b31f096c83f38a5166f0427f"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Jul 10 15:07:37 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 15:07:37 2026 +0200"
      },
      "message": "Merge pull request #2135 from apache/jbilleter/status-interactive-only\n\n_frontend: Disable status printer in non-interactive mode"
    },
    {
      "commit": "caf012e6ec68c2763b74cb7e2470adbba396f317",
      "tree": "b28b20a8bdcea4e2530c1e6d2280fb0911305509",
      "parents": [
        "bbbe58144a53625296b702f95cbc0f0d3b450529"
      ],
      "author": {
        "name": "Nathan Williams",
        "email": "nathan.williams@codethink.co.uk",
        "time": "Fri Jul 03 12:04:46 2026 +0100"
      },
      "committer": {
        "name": "Nathan Williams",
        "email": "nathan.williams@codethink.co.uk",
        "time": "Tue Jul 07 12:25:13 2026 +0100"
      },
      "message": "README.rst: Update communication channels\n\n- Remove link to the old irc server, that has been discontinued\n- Add link to the unoffical channel on matrix.org\n- Add link to the official mailing list on apache.org\n"
    },
    {
      "commit": "4a2fe3783beffe91b31f096c83f38a5166f0427f",
      "tree": "498886e32d0398ffbc5a9adefd5aa65dd9bc636a",
      "parents": [
        "bbbe58144a53625296b702f95cbc0f0d3b450529"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Mon Jun 22 19:51:55 2026 +0200"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Mon Jun 22 19:51:55 2026 +0200"
      },
      "message": "_frontend: Disable status printer in non-interactive mode\n\nIt was already disabled if the output streams weren\u0027t connected to a\nterminal. However, the CLI option `--no-interactive` accidentally\nenabled the status printer.\n"
    },
    {
      "commit": "bbbe58144a53625296b702f95cbc0f0d3b450529",
      "tree": "e49c973fa28d39c5ee0eb22cec32646b04e6663b",
      "parents": [
        "8149575d5dce9fdf7ea02bdfd1c82d92700dc67e",
        "13b3e25c3062c1ab7a61deea38b75fe5db5b5ab4"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Jun 19 12:24:26 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 19 12:24:26 2026 +0200"
      },
      "message": "Merge pull request #2123 from apache/infrastructure-ruleset-bot/default-branch-protection\n\n[INFRA] Set up default rulesets for default and release branches"
    },
    {
      "commit": "8149575d5dce9fdf7ea02bdfd1c82d92700dc67e",
      "tree": "1c0fc44611c2c61fb406cfb78495dddc4fda9d59",
      "parents": [
        "eca772f6f1175a5a8e867733651616eeed1d62ca",
        "641451e36e952960c29144f9efe8065153565e34"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Jun 19 12:09:17 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 19 12:09:17 2026 +0200"
      },
      "message": "Merge pull request #2125 from kotborealis/fix/workspace-reset-nested-name\n\nfix: use full element names in workspace reset"
    },
    {
      "commit": "eca772f6f1175a5a8e867733651616eeed1d62ca",
      "tree": "443468d13422ed9a79f74c933c70b4954f889464",
      "parents": [
        "f31b72e0ba900944eb8f6f35ddc1cf974b77c832",
        "c10c9e7e0415ac618cddd74325ddbe99a4b42bee"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Jun 19 11:07:38 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 19 11:07:38 2026 +0200"
      },
      "message": "Merge pull request #2133 from kotborealis/normalize-paths-elements\n\nloader: normalize ./-prefixed element names (#2132)"
    },
    {
      "commit": "f31b72e0ba900944eb8f6f35ddc1cf974b77c832",
      "tree": "f611391480249e25213ca29f57c613650cb998d3",
      "parents": [
        "914b2dead1ed80b4dd9eaf0f37728a0697675c91",
        "006d6b663b477272ea031d75b8fb73570cea7233"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Wed Jun 17 10:54:41 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 17 10:54:41 2026 +0200"
      },
      "message": "Merge pull request #2089 from apache/abderrahim/ruamel-yaml-malformed\n\n_yaml: Split error reporting for parser initialisation"
    },
    {
      "commit": "006d6b663b477272ea031d75b8fb73570cea7233",
      "tree": "f611391480249e25213ca29f57c613650cb998d3",
      "parents": [
        "914b2dead1ed80b4dd9eaf0f37728a0697675c91"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "abderrahim.kitouni@codethink.co.uk",
        "time": "Mon Nov 10 12:18:02 2025 +0100"
      },
      "committer": {
        "name": "Abderrahim Kitouni",
        "email": "abderrahim.kitouni@codethink.co.uk",
        "time": "Mon Jun 15 16:44:29 2026 +0100"
      },
      "message": "_yaml: Split error reporting for parser initialisation\n\nSome versions of ruamel-yaml-clib have a defective aarch64 wheel, but\nbuildstream was reporting \"Severely malformed YAML\" instead.\n"
    },
    {
      "commit": "914b2dead1ed80b4dd9eaf0f37728a0697675c91",
      "tree": "8bb4c54098662b367f65c7b6c38b70e75929e3e8",
      "parents": [
        "4c7fac5fa41dbd485fdde23b8eff9f5748ea0f66",
        "033b530ee8d5b150d1134c1606e9e19b0708481d"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Sat Jun 13 19:18:38 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 13 19:18:38 2026 +0200"
      },
      "message": "Merge pull request #2134 from apache/jbilleter/cython-names\n\nnode.pyx: Fix incorrect use of class private names"
    },
    {
      "commit": "033b530ee8d5b150d1134c1606e9e19b0708481d",
      "tree": "8bb4c54098662b367f65c7b6c38b70e75929e3e8",
      "parents": [
        "4c7fac5fa41dbd485fdde23b8eff9f5748ea0f66"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Sat Jun 13 11:08:49 2026 +0200"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Sat Jun 13 11:08:49 2026 +0200"
      },
      "message": "node.pyx: Fix incorrect use of class private names\n\nThis fixes the following Cython warning:\n\n    warning: src/buildstream/node.pyx:1626:0: Global name __CompositeError matched from within class scope in contradiction to Python \u0027class private name\u0027 rules. This may change in a future release.\n\nSee https://github.com/cython/cython/issues/3544.\n\nFixes #1981.\n"
    },
    {
      "commit": "c10c9e7e0415ac618cddd74325ddbe99a4b42bee",
      "tree": "1e71b5999c49337bc791f5517cb6a8835bedf663",
      "parents": [
        "0d8149a2f9dc79ecda67933264240ecd1d04c957"
      ],
      "author": {
        "name": "kotborealis",
        "email": "kotborealis@awooo.ru",
        "time": "Thu Jun 11 19:18:55 2026 +0300"
      },
      "committer": {
        "name": "kotborealis",
        "email": "kotborealis@awooo.ru",
        "time": "Fri Jun 12 14:18:13 2026 +0300"
      },
      "message": "loader: normalize ./-prefixed element names (#2132)\n"
    },
    {
      "commit": "4c7fac5fa41dbd485fdde23b8eff9f5748ea0f66",
      "tree": "d8ba68544377a26a688701d348a0cedab2cbcf72",
      "parents": [
        "0d8149a2f9dc79ecda67933264240ecd1d04c957",
        "39a6146551e4fccb40bee37773c0dc1b6d16deb0"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri Jun 12 12:21:16 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 12 12:21:16 2026 +0200"
      },
      "message": "Merge pull request #2131 from kotborealis/fix-generate-scripts-docs\n\nelement.py: Update error message for missing `generate_script`"
    },
    {
      "commit": "39a6146551e4fccb40bee37773c0dc1b6d16deb0",
      "tree": "d8ba68544377a26a688701d348a0cedab2cbcf72",
      "parents": [
        "0d8149a2f9dc79ecda67933264240ecd1d04c957"
      ],
      "author": {
        "name": "Evgeny Pistun",
        "email": "kotborealis@awooo.ru",
        "time": "Thu Jun 11 12:30:48 2026 +0300"
      },
      "committer": {
        "name": "Evgeny Pistun",
        "email": "kotborealis@awooo.ru",
        "time": "Thu Jun 11 12:33:01 2026 +0300"
      },
      "message": "chore: update error message for missing `generate_script`\n\nUpdated error message for non-implemented `generate_script`:\nit was referencing `write_script`, which is misleading.\n"
    },
    {
      "commit": "0d8149a2f9dc79ecda67933264240ecd1d04c957",
      "tree": "55f1924bb7e3ce2c8fac3857c5c6c30524b04ace",
      "parents": [
        "9412787d990eedb54d42c4d71dc56259dddfbb12",
        "7746237fe6886ad8caaf97b6237710c6c0bb267a"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@apache.org",
        "time": "Mon Jun 08 13:55:57 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 08 13:55:57 2026 +0100"
      },
      "message": "Merge pull request #2127 from pixlxip/patch-3\n\ndocs: \"lets\" → \"let\u0027s\" in tutorial"
    },
    {
      "commit": "9412787d990eedb54d42c4d71dc56259dddfbb12",
      "tree": "5c00b3042ecd4a9d2109352c0378b4de63073e70",
      "parents": [
        "a508a35458015f5e59f4c1a607662b4cae17c3c1",
        "77ad56be5b2f47e69ff4a775c0233b0694bb758b"
      ],
      "author": {
        "name": "Abderrahim Kitouni",
        "email": "akitouni@apache.org",
        "time": "Wed Jun 03 18:56:26 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jun 03 18:56:26 2026 +0100"
      },
      "message": "Merge pull request #2128 from joshua-zivkovic/JZ/installation-docs\n\nUpdate links to installation documentation"
    },
    {
      "commit": "77ad56be5b2f47e69ff4a775c0233b0694bb758b",
      "tree": "5c00b3042ecd4a9d2109352c0378b4de63073e70",
      "parents": [
        "a508a35458015f5e59f4c1a607662b4cae17c3c1"
      ],
      "author": {
        "name": "Joshua Zivkovic",
        "email": "joshua.zivkovic@codethink.co.uk",
        "time": "Mon Jun 01 11:50:32 2026 +0100"
      },
      "committer": {
        "name": "Joshua Zivkovic",
        "email": "joshua.zivkovic@codethink.co.uk",
        "time": "Mon Jun 01 12:26:28 2026 +0100"
      },
      "message": "Update links to installation documentation\n"
    },
    {
      "commit": "7746237fe6886ad8caaf97b6237710c6c0bb267a",
      "tree": "6c372b380b2943e6f45e63d6a4da286371d5fd7d",
      "parents": [
        "a508a35458015f5e59f4c1a607662b4cae17c3c1"
      ],
      "author": {
        "name": "pixl_xip",
        "email": "braydenrischke30@gmail.com",
        "time": "Sat May 30 10:02:57 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 30 10:02:57 2026 -0400"
      },
      "message": "\"lets\" → \"let\u0027s\" in tutorial\n\nFix a small typo."
    },
    {
      "commit": "042523a96865c81767d13d244a30aea0f4553132",
      "tree": "e4140628c2f21685410f55475774e7ad8c0598ce",
      "parents": [
        "a508a35458015f5e59f4c1a607662b4cae17c3c1"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri May 29 16:47:15 2026 +0200"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri May 29 18:00:04 2026 +0200"
      },
      "message": "doc/source/core_buildelement.rst: Add \u0027Build steps\u0027 section\n\nCo-authored-by: Dom Rodriguez \u003cdom.rodriguez@codethink.co.uk\u003e\n"
    },
    {
      "commit": "a508a35458015f5e59f4c1a607662b4cae17c3c1",
      "tree": "5d6c34f672f29cbe7721385cc54f19ddcc548ca2",
      "parents": [
        "937c00a101ec53317591887a3cadd7fb520b38d4",
        "18351338955e6299eacd29931f171177f7bd2fe4"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri May 29 14:34:31 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 29 14:34:31 2026 +0200"
      },
      "message": "Merge pull request #2124 from joshua-zivkovic/JZ/installation-docs\n\nAdd install docs from buildstream-site"
    },
    {
      "commit": "18351338955e6299eacd29931f171177f7bd2fe4",
      "tree": "5d6c34f672f29cbe7721385cc54f19ddcc548ca2",
      "parents": [
        "937c00a101ec53317591887a3cadd7fb520b38d4"
      ],
      "author": {
        "name": "Joshua Zivkovic",
        "email": "joshua.zivkovic@codethink.co.uk",
        "time": "Wed May 20 11:37:37 2026 +0100"
      },
      "committer": {
        "name": "Joshua Zivkovic",
        "email": "joshua.zivkovic@codethink.co.uk",
        "time": "Fri May 29 13:16:41 2026 +0100"
      },
      "message": "doc/source/main_install.rst: Add install docs from buildstream-site\n"
    },
    {
      "commit": "937c00a101ec53317591887a3cadd7fb520b38d4",
      "tree": "48de18679d23f54ed9591a595540a30eb22eb6c1",
      "parents": [
        "f6371f77f4c5f1aa7862220f3e9f491d7e6764cc",
        "8e99604ebbb261ad02a3ba56ba7ca866ea9e5154"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri May 22 17:03:46 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 22 17:03:46 2026 +0200"
      },
      "message": "Merge pull request #2119 from apache/jbilleter/junction-provenance\n\nDefer source provenance check until the project is fully loaded"
    },
    {
      "commit": "f6371f77f4c5f1aa7862220f3e9f491d7e6764cc",
      "tree": "858756ce599e9f4e534f5ed53449ba250e640cd7",
      "parents": [
        "5349c6c84b23c31fcaee98a2e6101a0aa2668258",
        "1312bd8f51c3b70d3c96b75e4fc490dea8154f6c"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Thu May 21 20:03:53 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 20:03:53 2026 +0200"
      },
      "message": "Merge pull request #2122 from apache/jbilleter/doc-buildelement\n\ndocs: Move BuildElement\u0027s \"Built-in functionality\" to a new page"
    },
    {
      "commit": "641451e36e952960c29144f9efe8065153565e34",
      "tree": "dbbb0ac3dde3d3f4ddc868ca269550182b03fbf2",
      "parents": [
        "5349c6c84b23c31fcaee98a2e6101a0aa2668258"
      ],
      "author": {
        "name": "kotborealis",
        "email": "kotborealis@awooo.ru",
        "time": "Wed May 20 13:43:37 2026 +0300"
      },
      "committer": {
        "name": "Evgeny Pistun",
        "email": "Evgeny.Pistun@kaspersky.com",
        "time": "Wed May 20 21:08:54 2026 +0300"
      },
      "message": "fix: use full element names in workspace reset\n\nFixes a bug where `workspace reset` did not work for junctions.\n\nFor example, we have a project with struct like this:\n```\nnested.bst:hello.bst\n```\n\nSo the root project has one element `nested.bst`, which is a junction to\nanother project, and the junction has one element `hello.bst`.\n\nIf we try to open this element as workspace, it works:\n```\nbst workspace open nested.bst:hello.bst\n```\n\nIf we try to close this workspace, it works:\n```\nbst workspace close nested.bst:hello.bst\n```\n\nHowever, if we try `bst workspace reset` command on it, it fails with\nerror `Workspace does not exist`.\nThe error is that `workspace_reset` method called `workspace_exists`\nwith `element.name`, which was resolved to just `hello.bst`.\nIn comparsion, a few lines down, it uses `get_workspace` with\n`element._get_full_name()`, which is `nested.bst:hello.bst`.\n\nThis patch updates `workspace_reset` function to check existence using\nelement full name to support junctions.\n"
    },
    {
      "commit": "13b3e25c3062c1ab7a61deea38b75fe5db5b5ab4",
      "tree": "b01ef14e4b940f41e199baef3c397c80a3d658d4",
      "parents": [
        "5349c6c84b23c31fcaee98a2e6101a0aa2668258"
      ],
      "author": {
        "name": "The Apache Software Foundation",
        "email": "root-asf-gitbox-commits@apache.org",
        "time": "Fri May 15 14:01:52 2026 -0500"
      },
      "committer": {
        "name": "The Apache Software Foundation",
        "email": "root-asf-gitbox-commits@apache.org",
        "time": "Fri May 15 14:01:52 2026 -0500"
      },
      "message": "Set up default protection ruleset for default and release branches"
    },
    {
      "commit": "1312bd8f51c3b70d3c96b75e4fc490dea8154f6c",
      "tree": "858756ce599e9f4e534f5ed53449ba250e640cd7",
      "parents": [
        "5349c6c84b23c31fcaee98a2e6101a0aa2668258"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri May 08 17:36:21 2026 +0200"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri May 08 17:59:24 2026 +0200"
      },
      "message": "docs: Move BuildElement\u0027s \"Built-in functionality\" to a new page\n\nThe documentation of how to use the common features provided by the\n`BuildElement` base class is currently part of the API reference even\nthough it\u0027s more relevant to project authors than plugin developers.\n\nThis moves that section to a new page in the \"Reference\" section, next\nto other plugin-specific documentation.\n\nCo-authored-by: Dom Rodriguez \u003cdom.rodriguez@codethink.co.uk\u003e\n"
    },
    {
      "commit": "5349c6c84b23c31fcaee98a2e6101a0aa2668258",
      "tree": "4605c817c805f1414254d8d93a223cd0d97804b6",
      "parents": [
        "4c92f3003cfba379edd9d653a72d860ded013445",
        "e71137667af24bb17819ac3d6b112d1f943a3294"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Thu May 07 09:41:54 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 07 09:41:54 2026 +0200"
      },
      "message": "Merge pull request #2121 from joshua-zivkovic/JZ/link-typo\n\ndoc/source/main_install.rst: Fix typo in link syntax"
    },
    {
      "commit": "e71137667af24bb17819ac3d6b112d1f943a3294",
      "tree": "4605c817c805f1414254d8d93a223cd0d97804b6",
      "parents": [
        "4c92f3003cfba379edd9d653a72d860ded013445"
      ],
      "author": {
        "name": "Joshua Zivkovic",
        "email": "joshua.zivkovic@codethink.co.uk",
        "time": "Thu May 07 08:05:16 2026 +0100"
      },
      "committer": {
        "name": "Joshua Zivkovic",
        "email": "joshua.zivkovic@codethink.co.uk",
        "time": "Thu May 07 08:06:43 2026 +0100"
      },
      "message": "doc/source/main_install.rst: Fix typo in link syntax\n"
    },
    {
      "commit": "8e99604ebbb261ad02a3ba56ba7ca866ea9e5154",
      "tree": "c9b1ec1324be781721f634d04804d967250fe773",
      "parents": [
        "4d47d482c385a245273719d157b04904d0420038"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Sun Apr 26 17:02:52 2026 +0200"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri May 01 18:44:47 2026 +0200"
      },
      "message": "tests/sources/source_provenance_attributes.py: Test junction provenance\n\nJunctions may be loaded before a project is fully loaded, which means\nthat the source provenance attribute project configuration may not be\navailable yet.\n"
    },
    {
      "commit": "4d47d482c385a245273719d157b04904d0420038",
      "tree": "c1f334c93e9882e385789625c293e7ae6a834704",
      "parents": [
        "d07808b2f76234445616132ee798da8a9f45af3f"
      ],
      "author": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri May 01 14:50:45 2026 +0200"
      },
      "committer": {
        "name": "Jürg Billeter",
        "email": "j@bitron.ch",
        "time": "Fri May 01 18:44:47 2026 +0200"
      },
      "message": "_stream.py: Ensure all projects are fully loaded\n\nSpecifying only a junction as target may otherwise leave the project in\na partially loaded state.\n"
    }
  ],
  "next": "d07808b2f76234445616132ee798da8a9f45af3f"
}
