)]}'
{
  "log": [
    {
      "commit": "88f90e87fd61a95bc1e6c463d6d3eb19b3e80f68",
      "tree": "edc1f8597ca1206b6a5b2eb5e30b743adc506695",
      "parents": [
        "77d328f5f679bfef14b1f67f3cd431b729bc786f",
        "0b115d88d40cb9094eeac65d8d870bfbc90920ff"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Jul 19 14:17:57 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 19 14:17:57 2026 +0200"
      },
      "message": "Merge pull request #2680 from moritzx22/fix2666\n\nOnly load depsfile if not dirty [Fix #2666]"
    },
    {
      "commit": "0b115d88d40cb9094eeac65d8d870bfbc90920ff",
      "tree": "edc1f8597ca1206b6a5b2eb5e30b743adc506695",
      "parents": [
        "a658435634be58bdef424d2d1a36f7c194b81c69"
      ],
      "author": {
        "name": "Moritz",
        "email": "moritz.mh22@gmail.com",
        "time": "Wed Apr 01 14:54:11 2026 +0200"
      },
      "committer": {
        "name": "moritzx22",
        "email": "moritz.mh22@gmail.com",
        "time": "Sat Jul 18 23:04:17 2026 +0200"
      },
      "message": "Load depfile only when output nodes are not dirty\n\nThis change updates the logic so that the depfile is loaded only when no\noutput node is not dirty based on manifest and dyndep inputs (excluding the\ndepfile itself). If the outputs are already scheduled to be regenerated, loading\nthe depfile is unnecessary, since its only purpose is to trigger regeneration\nof the outputs — which is already guaranteed.\n\nAvoiding the use of a potentially outdated depfile prevents incorrect cycle\ndetection and ensures that stale depfiles are no longer added to the graph.\n"
    },
    {
      "commit": "a658435634be58bdef424d2d1a36f7c194b81c69",
      "tree": "103576fd8142f9a22cc41de37ad8a8984b7b7b99",
      "parents": [
        "3d8720939e9aa410d88644f14a5fad99c8a34a71"
      ],
      "author": {
        "name": "moritzX22",
        "email": "moritz.mh22@gmail.com",
        "time": "Sat Apr 04 23:49:31 2026 +0200"
      },
      "committer": {
        "name": "moritzx22",
        "email": "moritz.mh22@gmail.com",
        "time": "Sat Jul 18 22:32:39 2026 +0200"
      },
      "message": "Refactor dirty‑state recomputation with caching and cleanup\n\nReplace DependencyScan::RecomputeOutputDirty with the new\nRecomputeOutputsDirtyCache helper class to centralize the\nlogic for determining whether edge outputs are dirty.\nThe new cache‑aware implementation avoids redundant work,\nimproves readability, and prepares the codebase for upcoming\nchanges to load depfiles only when nodes are not dirty.\n\nBuild‑log lookups are now cached, and command hash computation\nis performed lazily to improve performance.\n\nThis commit introduces no functional changes.\n"
    },
    {
      "commit": "3d8720939e9aa410d88644f14a5fad99c8a34a71",
      "tree": "6743c3e7890d76c14bf3f61a58982c60b4360364",
      "parents": [
        "2501879439ba5c65eaf559565c0f24d368ee3e65"
      ],
      "author": {
        "name": "moritzX22",
        "email": "moritz.mh22@gmail.com",
        "time": "Sat Apr 04 01:36:09 2026 +0200"
      },
      "committer": {
        "name": "moritzx22",
        "email": "moritz.mh22@gmail.com",
        "time": "Sat Jul 18 22:32:39 2026 +0200"
      },
      "message": "Refactoring\n\nThis change refactors internal parts of the code without altering functional\nbehavior. It prepares the implementation for a future update in which\ndependencies will be loaded only when inputs are not marked dirty.\n\nThe sequence in which only a subset of inputs can be specified to be processed\nwill matter for upcoming changes to depfile loading. A new helper function\n\u0027RecomputeEdgesInputsDirty\u0027 has been introduced for clarity.\nThe function can be specified to visit only a subset of an edge’s inputs as\nwell.\n"
    },
    {
      "commit": "2501879439ba5c65eaf559565c0f24d368ee3e65",
      "tree": "313721d504556803d1d6c0d8843674fa03cb7bed",
      "parents": [
        "77d328f5f679bfef14b1f67f3cd431b729bc786f"
      ],
      "author": {
        "name": "moritzX22",
        "email": "moritz.mh22@gmail.com",
        "time": "Sat Apr 04 01:35:57 2026 +0200"
      },
      "committer": {
        "name": "moritzx22",
        "email": "moritz.mh22@gmail.com",
        "time": "Sat Jul 18 22:32:39 2026 +0200"
      },
      "message": "Reorder operations in RecomputeNodeDirty\n\nThis change adjusts the internal order of the load output mtimes step and the\nstep that recomputes the dirty state of inputs. The modification does not alter\nany functional behavior. The reordering improves internal consistency and\nprepares the code for upcoming changes.\n"
    },
    {
      "commit": "77d328f5f679bfef14b1f67f3cd431b729bc786f",
      "tree": "34d8e8bb8fe95ccfeab894efc0e283697e54fe47",
      "parents": [
        "ada4c1029b6bf4e8c5becd3870b887024c87c367",
        "77fc2c3686957bb4d0a85c28db1454c2909b3612"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Thu Jul 09 15:57:34 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 15:57:34 2026 +0200"
      },
      "message": "Merge pull request #2797 from orgads/emhash\n\nUpdate emhash"
    },
    {
      "commit": "ada4c1029b6bf4e8c5becd3870b887024c87c367",
      "tree": "9544725f1a780387b206e4405f3fb94796701d74",
      "parents": [
        "89a60dbf95c6ad7fc93bf02e572c0e00d4dcb1a7",
        "034e2b838bf8f289f753909ddb8c86db1fea3635"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Jul 01 21:56:15 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 21:56:15 2026 +0200"
      },
      "message": "Merge pull request #2809 from elliotgoodrich/fix-signature-mismatch\n\nFix signature mismatch in `StatusFormatEnv`"
    },
    {
      "commit": "034e2b838bf8f289f753909ddb8c86db1fea3635",
      "tree": "9544725f1a780387b206e4405f3fb94796701d74",
      "parents": [
        "89a60dbf95c6ad7fc93bf02e572c0e00d4dcb1a7"
      ],
      "author": {
        "name": "Elliot Goodrich",
        "email": "elliotgoodrich@gmail.com",
        "time": "Wed Jul 01 19:46:50 2026 +0100"
      },
      "committer": {
        "name": "Elliot Goodrich",
        "email": "elliotgoodrich@gmail.com",
        "time": "Wed Jul 01 19:46:50 2026 +0100"
      },
      "message": "Fix signature mismatch in `StatusFormatEnv`\n\n`StatusFormatEnv` was added as an implementation of `Env`, but at the\nsame time the signature of `LookupVariable` was changed.  This caused a\ncompilation failure when both were merged.\n"
    },
    {
      "commit": "89a60dbf95c6ad7fc93bf02e572c0e00d4dcb1a7",
      "tree": "cc66486eea65140bdef9018c6cb6dd3925b6fb51",
      "parents": [
        "ce60eb1bce8710f0cb8b9e33a953cbc13e565d37",
        "7e612cc13975615751f886579d23471f2bda0984"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Jul 01 20:17:25 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 01 20:17:25 2026 +0200"
      },
      "message": "Merge pull request #2716 from elliotgoodrich/take-stringpiece-on-graph-methods\n\nAvoid string copies on lookup methods"
    },
    {
      "commit": "ce60eb1bce8710f0cb8b9e33a953cbc13e565d37",
      "tree": "87966c68acce6f7ac340417a18f92a34f0c7a094",
      "parents": [
        "33a4003f1f97a41821f84a3302366f7242485715",
        "23a6827a4593e12527b5d5b33be7d5dd58d6c924"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Mon Jun 29 19:27:41 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 19:27:41 2026 +0200"
      },
      "message": "Merge pull request #2774 from jhasse/status-description\n\nAllow to change order of description in --status"
    },
    {
      "commit": "33a4003f1f97a41821f84a3302366f7242485715",
      "tree": "3e7653b64269894c73c74412c201d5b3a1a39c0f",
      "parents": [
        "8942286b5733dd16fceb60a813c161df69dd97ce",
        "a2f5ce74211f87fae57530ca80bc5499d9e2e0b0"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Mon Jun 29 19:20:12 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 19:20:12 2026 +0200"
      },
      "message": "Merge pull request #2799 from orgads/mkdtemp-mingw\n\nFix test build on mingw"
    },
    {
      "commit": "8942286b5733dd16fceb60a813c161df69dd97ce",
      "tree": "37ac62b60f843abcf7a9241bedc6c386ce4f8368",
      "parents": [
        "06191e72d2710ea80a9ff2fb5f7faa0eee22dda6",
        "9cf0f74e19ac5cc5886063f43540fb401b9298c4"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Mon Jun 29 19:16:42 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 19:16:42 2026 +0200"
      },
      "message": "Merge pull request #2804 from ninja-build/dependabot/github_actions/actions/checkout-7\n\nBump actions/checkout from 6 to 7"
    },
    {
      "commit": "9cf0f74e19ac5cc5886063f43540fb401b9298c4",
      "tree": "37ac62b60f843abcf7a9241bedc6c386ce4f8368",
      "parents": [
        "06191e72d2710ea80a9ff2fb5f7faa0eee22dda6"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jun 22 08:52:40 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 22 08:52:40 2026 +0000"
      },
      "message": "Bump actions/checkout from 6 to 7\n\nBumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/checkout\n  dependency-version: \u00277\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "06191e72d2710ea80a9ff2fb5f7faa0eee22dda6",
      "tree": "c0cac0a1fca2f1b35f1cae8d6b80fdef81f9e543",
      "parents": [
        "f735970600b5713276583589dce207d575950b14",
        "d128826522bbb4a0d9650e0d3b9bc47f33d5bf81"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Jun 16 09:33:23 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 09:33:23 2026 +0200"
      },
      "message": "Merge pull request #2796 from orgads/tests-pipe\n\nTests: Use context manager for Popen"
    },
    {
      "commit": "a2f5ce74211f87fae57530ca80bc5499d9e2e0b0",
      "tree": "8a852acad1c55919ade8d655160c5bfea2542776",
      "parents": [
        "f735970600b5713276583589dce207d575950b14"
      ],
      "author": {
        "name": "Orgad Shaneh",
        "email": "orgad.shaneh@audiocodes.com",
        "time": "Sun Jun 14 18:27:48 2026 +0300"
      },
      "committer": {
        "name": "Orgad Shaneh",
        "email": "orgad.shaneh@audiocodes.com",
        "time": "Sun Jun 14 18:29:01 2026 +0300"
      },
      "message": "Fix test build on mingw\n\nmingw headers do have mkdtemp in stdlib.h.\n"
    },
    {
      "commit": "77fc2c3686957bb4d0a85c28db1454c2909b3612",
      "tree": "7c4d0937ae5ec083064dbe6a29cf827ac39117a3",
      "parents": [
        "f735970600b5713276583589dce207d575950b14"
      ],
      "author": {
        "name": "Orgad Shaneh",
        "email": "orgad.shaneh@audiocodes.com",
        "time": "Sun Jun 14 13:24:47 2026 +0300"
      },
      "committer": {
        "name": "Orgad Shaneh",
        "email": "orgad.shaneh@audiocodes.com",
        "time": "Sun Jun 14 17:13:52 2026 +0300"
      },
      "message": "Update emhash\n\nFixes the following warning:\nsrc/third_party/emhash/hash_table8.hpp:1100:33: warning: Result of \u0027malloc\u0027 is converted to a pointer of type \u0027char\u0027, which is incompatible with sizeof operand type \u0027Index\u0027 [unix.MallocSizeof]\n"
    },
    {
      "commit": "d128826522bbb4a0d9650e0d3b9bc47f33d5bf81",
      "tree": "c0cac0a1fca2f1b35f1cae8d6b80fdef81f9e543",
      "parents": [
        "f735970600b5713276583589dce207d575950b14"
      ],
      "author": {
        "name": "Orgad Shaneh",
        "email": "orgad.shaneh@audiocodes.com",
        "time": "Sun Jun 14 12:29:24 2026 +0300"
      },
      "committer": {
        "name": "Orgad Shaneh",
        "email": "orgad.shaneh@audiocodes.com",
        "time": "Sun Jun 14 14:45:11 2026 +0300"
      },
      "message": "Tests: Use context manager for Popen\n\nResourceWarning: unclosed file \u003c_io.BufferedReader name\u003d3\u003e\n"
    },
    {
      "commit": "f735970600b5713276583589dce207d575950b14",
      "tree": "efd0c0b9d7f8d5eaf6d8b6c3a00870dfde5aa512",
      "parents": [
        "cdb7c8be8ebd3e34ceb8024d0a900d1d83b0fcc7",
        "2ae7caf07ef10bb98ba16090aac0568486db9110"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Jun 14 13:00:03 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 14 13:00:03 2026 +0200"
      },
      "message": "Merge pull request #2751 from philwo/clean-multi-outputs\n\nFix -t clean to remove all outputs of multi-output edges"
    },
    {
      "commit": "cdb7c8be8ebd3e34ceb8024d0a900d1d83b0fcc7",
      "tree": "43706e59a3622ae42d5b835aec91bd412a4a78cf",
      "parents": [
        "ec91f7db71a9ec33752d695d38fa24751583fd88",
        "2c729faff30a8014e29bb1e2c03697209a75a6a5"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Jun 14 12:58:34 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 14 12:58:34 2026 +0200"
      },
      "message": "Merge pull request #2763 from braydenkrus/patch-2\n\nCheck `NO_COLOR` flag before `CLICOLOR_FORCE`"
    },
    {
      "commit": "ec91f7db71a9ec33752d695d38fa24751583fd88",
      "tree": "ddd6862f4bbc7e715fbd4c95c79390d73ca549b8",
      "parents": [
        "f942e6efa03d4530e6bfe41d952f3e58db6d0db9",
        "dd1faec2c932aeee48b8160adc961049b27db85b"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Jun 14 12:54:42 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 14 12:54:42 2026 +0200"
      },
      "message": "Merge pull request #2789 from bradking/dyndep-multi\n\ndyndep: fix handling of multiple dyndep file outputs on one edge"
    },
    {
      "commit": "f942e6efa03d4530e6bfe41d952f3e58db6d0db9",
      "tree": "6266ba759f0fc84ce995da62d25d8f454a015ee2",
      "parents": [
        "5a7fe11473259e7111dfb6196541f503bc5fa512",
        "75c3aeecbf2629419b1e4b04ef37d6a31a81c999"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Jun 14 12:47:53 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 14 12:47:53 2026 +0200"
      },
      "message": "Merge pull request #2792 from orgads/bootstrap-test\n\nFix bootstrap with unit tests"
    },
    {
      "commit": "75c3aeecbf2629419b1e4b04ef37d6a31a81c999",
      "tree": "6266ba759f0fc84ce995da62d25d8f454a015ee2",
      "parents": [
        "5a7fe11473259e7111dfb6196541f503bc5fa512"
      ],
      "author": {
        "name": "Orgad Shaneh",
        "email": "orgad.shaneh@audiocodes.com",
        "time": "Sun Jun 14 00:36:15 2026 +0300"
      },
      "committer": {
        "name": "Orgad Shaneh",
        "email": "orgad.shaneh@audiocodes.com",
        "time": "Sun Jun 14 00:37:06 2026 +0300"
      },
      "message": "Fix bootstrap with unit tests\n\nbootstrap complete.  rebuilding...\nninja: error: build.ninja:220: multiple rules generate build/string_piece_util.o\n\nTraceback (most recent call last):\n  File \"/home/orgads/Projects/ninja/./configure.py\", line 813, in \u003cmodule\u003e\n    subprocess.check_call(rebuild_args)\n    ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^\n  File \"/usr/lib/python3.13/subprocess.py\", line 419, in check_call\n    raise CalledProcessError(retcode, cmd)\nsubprocess.CalledProcessError: Command \u0027[\u0027./ninja\u0027]\u0027 returned non-zero exit status 1.\n\nAmends commit 0d3b9f16b376b1e31c94e60180dacb1f336ebe31.\n"
    },
    {
      "commit": "dd1faec2c932aeee48b8160adc961049b27db85b",
      "tree": "f2233d0e1a44e42aeca7004b9fc74773caeb6d1f",
      "parents": [
        "5a7fe11473259e7111dfb6196541f503bc5fa512"
      ],
      "author": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Thu May 28 12:29:16 2026 -0400"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Tue Jun 09 16:06:20 2026 -0400"
      },
      "message": "dyndep: fix handling of multiple dyndep file outputs on one edge\n\nNormally an edge with a dyndep binding cannot be scheduled until its\ndyndep file is loaded because we require the dyndep file to be an input.\nHowever, in the case that one edge produces multiple dyndep files as\noutputs, none of their dependent edges is blocked on its dyndep input\nbecause all the dyndep files are ready.  Load all of the dyndep files\nbefore recomputing graph readiness to avoid mistakenly scheduling an\nedge that appears to be ready only because its dyndep information has\nnot been loaded yet.\n\nFixes: #2782\n"
    },
    {
      "commit": "5a7fe11473259e7111dfb6196541f503bc5fa512",
      "tree": "954067abb996288ae090bafaf7e9e54b1cd78d06",
      "parents": [
        "173f464386051d01712edededc5edd5c0133cf76"
      ],
      "author": {
        "name": "scivision",
        "email": "10931741+scivision@users.noreply.github.com",
        "time": "Thu May 21 11:09:24 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 17:09:24 2026 +0200"
      },
      "message": "deduplicate CMake target logic (#2775)\n\n* deduplicate getopt.c CMake CXX language\n\n* deduplicate clang-tidy CMake script\n\n---------\n\nCo-authored-by: scivision \u003cscivision@users.noreply.github.com\u003e"
    },
    {
      "commit": "173f464386051d01712edededc5edd5c0133cf76",
      "tree": "790a82039e3f011352f8f3355b52c5dd35fa49b8",
      "parents": [
        "2a8ddccd35fbe9cd235fbda192cc941dcdb3efcf",
        "0d57a90b5d956faeaca3635e01342bcbd217b758"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Thu May 21 17:05:47 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 17:05:47 2026 +0200"
      },
      "message": "Merge pull request #2777 from scivision/cmake-noop\n\nremove noop CMake policy - always new already"
    },
    {
      "commit": "2c729faff30a8014e29bb1e2c03697209a75a6a5",
      "tree": "ac69574e3aff657e5f88110697a4578c0995fe88",
      "parents": [
        "044656d45d0e56e082d9361df229254a183d1fff"
      ],
      "author": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Wed May 20 12:44:39 2026 -0400"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Wed May 20 12:44:39 2026 -0400"
      },
      "message": "Remove unnecessary NO_COLOR checks, condense checks for CLICOLOR_FORCE and FORCE_COLOR\n"
    },
    {
      "commit": "0d57a90b5d956faeaca3635e01342bcbd217b758",
      "tree": "790a82039e3f011352f8f3355b52c5dd35fa49b8",
      "parents": [
        "2a8ddccd35fbe9cd235fbda192cc941dcdb3efcf"
      ],
      "author": {
        "name": "scivision",
        "email": "scivision@users.noreply.github.com",
        "time": "Fri May 15 19:34:14 2026 -0400"
      },
      "committer": {
        "name": "scivision",
        "email": "scivision@users.noreply.github.com",
        "time": "Fri May 15 19:34:14 2026 -0400"
      },
      "message": "remove noop CMake policy - always new already\n\ncmake_minimum_required(VERSION 3.9) and higher already set this\npolicy. Further, the canonical way for projects to set individual\npolicies is as done for CMP0135 in this project.\n"
    },
    {
      "commit": "23a6827a4593e12527b5d5b33be7d5dd58d6c924",
      "tree": "c77a4c97904addb78748e136cb3f5371706e767c",
      "parents": [
        "2a8ddccd35fbe9cd235fbda192cc941dcdb3efcf"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed May 13 22:16:03 2026 +0200"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed May 13 22:16:26 2026 +0200"
      },
      "message": "Allow to change order of description in --status\n\nReplacement for #1045.\n"
    },
    {
      "commit": "2a8ddccd35fbe9cd235fbda192cc941dcdb3efcf",
      "tree": "95710f41f90dda6daafb8361091af7afd4d41a6b",
      "parents": [
        "166d02307de7d38a6c953c7ef3a0b5f9c956119d",
        "0f555577288a1c4a672bc7121904dfc092b390f0"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed May 13 22:12:35 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 22:12:35 2026 +0200"
      },
      "message": "Merge pull request #2772 from jhasse/status-cmd-line\n\nAdd --status flag with Ninja-style variable expansion"
    },
    {
      "commit": "0f555577288a1c4a672bc7121904dfc092b390f0",
      "tree": "05a6137fdd970854d97f9604125aea461488357e",
      "parents": [
        "aa4c15c20f0eab33b1beb189d6b6b5585dc06586"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed May 13 21:06:00 2026 +0200"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed May 13 21:06:00 2026 +0200"
      },
      "message": "Add --status flag with Ninja-style variable expansion\n\nIntroduces a `--status FMT` command-line flag that configures the\nprogress status using Ninja\u0027s regular `$var`/`${var}` syntax with\ndescriptive variable names ($finished, $total, $progress, $elapsed,\netc.) instead of the `%`-escapes used by `NINJA_STATUS`. When passed,\nit takes precedence over `NINJA_STATUS`; the env-var path is left\nunchanged for backwards compatibility.\n"
    },
    {
      "commit": "166d02307de7d38a6c953c7ef3a0b5f9c956119d",
      "tree": "9e01389c70c2078604d34e41f78303af9382238f",
      "parents": [
        "aa4c15c20f0eab33b1beb189d6b6b5585dc06586",
        "28d54089829808f5b8760eafaa312781c11acd60"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Mon May 11 15:56:37 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 11 15:56:37 2026 +0200"
      },
      "message": "Merge pull request #2771 from jhasse/test_issue_2621\n\nMake test_issue_2621 resistence against different ordering"
    },
    {
      "commit": "28d54089829808f5b8760eafaa312781c11acd60",
      "tree": "9e01389c70c2078604d34e41f78303af9382238f",
      "parents": [
        "aa4c15c20f0eab33b1beb189d6b6b5585dc06586"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sat May 09 22:00:37 2026 +0200"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sat May 09 22:00:37 2026 +0200"
      },
      "message": "Make test_issue_2621 resistence against different ordering\n\nSee #2621.\n"
    },
    {
      "commit": "aa4c15c20f0eab33b1beb189d6b6b5585dc06586",
      "tree": "cdf3bbc85ba6d5b53c49e055688bb657c13de669",
      "parents": [
        "68398e170d63abdeddaedc5d439f39c91a9f8ea2",
        "0d3b9f16b376b1e31c94e60180dacb1f336ebe31"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sat May 09 00:04:15 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 09 00:04:15 2026 +0200"
      },
      "message": "Merge pull request #2722 from elliotgoodrich/small-string-utils\n\nAdd `StringPiece::substr` method"
    },
    {
      "commit": "68398e170d63abdeddaedc5d439f39c91a9f8ea2",
      "tree": "cb8fee7f85bc0e65e45a7fe253c9b7e8c353025a",
      "parents": [
        "b7b5d3183a5c6cd817ab1bd3c9511fe6ff7d2b6a",
        "8a2d5fb340934050a4b42224265360eb7b37cc7b"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sat May 09 00:02:23 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 09 00:02:23 2026 +0200"
      },
      "message": "Merge pull request #2738 from ninja-build/dependabot/github_actions/actions/upload-artifact-7\n\nBump actions/upload-artifact from 6 to 7"
    },
    {
      "commit": "b7b5d3183a5c6cd817ab1bd3c9511fe6ff7d2b6a",
      "tree": "78387e4c09e524544922353e05b567704b077653",
      "parents": [
        "02e3fd228b526b97c58f0d48ee945f627daf401c",
        "389d044d93c11ab18b8231af0c06888037994b4e"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sat May 09 00:00:58 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat May 09 00:00:58 2026 +0200"
      },
      "message": "Merge pull request #2744 from braydenkrus/patch-1\n\nDocument `pool` option under \"Rule Variables\""
    },
    {
      "commit": "02e3fd228b526b97c58f0d48ee945f627daf401c",
      "tree": "dd607bd0cdf148b49e599020a0abfe629fb1189a",
      "parents": [
        "a830ae5b156f899b6c42043a8d8d284120c0a893",
        "f19dc4a4e253444fafc75cca5abfae9c011f6d39"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Fri May 08 11:27:48 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 08 11:27:48 2026 +0200"
      },
      "message": "Merge pull request #2765 from jhasse/builddir-target\n\nFall back to $builddir/target when target lookup fails"
    },
    {
      "commit": "044656d45d0e56e082d9361df229254a183d1fff",
      "tree": "fa942aebaa59b07ff89aca6f2c10b375908847ca",
      "parents": [
        "6aa47db2a3509b990f34e5ed5ca538bfafd2f1b6"
      ],
      "author": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Mon May 04 15:26:59 2026 -0400"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Mon May 04 15:26:59 2026 -0400"
      },
      "message": "Add a check for NO_COLOR for UNIX that was included for Windows\n"
    },
    {
      "commit": "6aa47db2a3509b990f34e5ed5ca538bfafd2f1b6",
      "tree": "70cdcc05d23ee2324c4b5b874a791beb84c0aa02",
      "parents": [
        "d4f11df90f7211a399625948254b2c8536da5a82"
      ],
      "author": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Mon May 04 12:21:08 2026 -0400"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Mon May 04 12:21:08 2026 -0400"
      },
      "message": "Use anonymous namespace for helper functions, uncomment NO_COLOR code\n"
    },
    {
      "commit": "d4f11df90f7211a399625948254b2c8536da5a82",
      "tree": "8e1ac61d7768916d942e0d1b94cf9fcfd7ab61bb",
      "parents": [
        "61b029a1f387ed054f9bcf2d0870414153d3990d"
      ],
      "author": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Thu Apr 30 10:04:57 2026 -0400"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Thu Apr 30 10:04:57 2026 -0400"
      },
      "message": "Remove ansi_color, move its implementation to line_printer\n"
    },
    {
      "commit": "61b029a1f387ed054f9bcf2d0870414153d3990d",
      "tree": "ce1be08381a69ee6059e6ad542a5df26d7ee3825",
      "parents": [
        "14fa2b7df0f826f03cd7bf9fba77b783ce75e73a"
      ],
      "author": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Tue Apr 28 10:20:59 2026 -0400"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Tue Apr 28 10:20:59 2026 -0400"
      },
      "message": "Switch to getenv and _putenv_s for Windows ansi_color\n"
    },
    {
      "commit": "f19dc4a4e253444fafc75cca5abfae9c011f6d39",
      "tree": "32fdd3bc26de462c50e09ae847a9cd1a5af79eb5",
      "parents": [
        "93e431abd3e8bad89f076a2beab7b1e4598985c7"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Apr 28 08:11:46 2026 +0200"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Apr 28 08:11:46 2026 +0200"
      },
      "message": "Address comments\n"
    },
    {
      "commit": "a830ae5b156f899b6c42043a8d8d284120c0a893",
      "tree": "1131af2c25753cdca10a501c151187860d2c3e29",
      "parents": [
        "def9560a0b6d755936e615ce443a0aec45c39bdb",
        "1a7da2b33abfca8c75467deac82c726c9ff6dcfc"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Apr 28 07:51:10 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 07:51:10 2026 +0200"
      },
      "message": "Merge pull request #2726 from jamesl-10/ninja-parallelism\n\nMake full use of parallelism in jobserver mode"
    },
    {
      "commit": "14fa2b7df0f826f03cd7bf9fba77b783ce75e73a",
      "tree": "693f73846e94870eab1c756dedcc9cb9a92365b6",
      "parents": [
        "1e6c96fd03aa12f7e203bb368c03c67c5279dcc4"
      ],
      "author": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Thu Apr 23 10:45:25 2026 -0400"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Thu Apr 23 10:45:25 2026 -0400"
      },
      "message": "Fix AnsiColorTest on Windows, remove Windows line endings\n"
    },
    {
      "commit": "1e6c96fd03aa12f7e203bb368c03c67c5279dcc4",
      "tree": "08a0967211409d60dd13bbc6862b83aac5914c87",
      "parents": [
        "201c9b944a8700ddfad2f5199d763206bb052532",
        "27e4b60d831107140cdc15cbad82350d8a701647"
      ],
      "author": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Fri Apr 17 15:11:06 2026 -0400"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Fri Apr 17 15:11:06 2026 -0400"
      },
      "message": "Implement ansi_color\n"
    },
    {
      "commit": "201c9b944a8700ddfad2f5199d763206bb052532",
      "tree": "08a0967211409d60dd13bbc6862b83aac5914c87",
      "parents": [
        "e1707b46db6d77a3f95e32c52e4a67ca549b0c94"
      ],
      "author": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Fri Apr 17 15:05:56 2026 -0400"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Fri Apr 17 15:05:56 2026 -0400"
      },
      "message": "Implement ansi_color\n"
    },
    {
      "commit": "27e4b60d831107140cdc15cbad82350d8a701647",
      "tree": "ed5e5b1ea840d49bb86f9453d9c27d9696071dea",
      "parents": [
        "e1707b46db6d77a3f95e32c52e4a67ca549b0c94"
      ],
      "author": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Mon Apr 13 08:54:39 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 08:54:39 2026 -0400"
      },
      "message": "Simplify helper functions"
    },
    {
      "commit": "def9560a0b6d755936e615ce443a0aec45c39bdb",
      "tree": "f1c071efeb8666292627875a689eb1bb1070cce9",
      "parents": [
        "cedf78d68a9fd1a3233e59569455e1f3f8c19680",
        "93d37d0cb101ad6e51875b86417feb99f94fc3d4"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Sun Apr 12 12:45:24 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 12 12:45:24 2026 -0400"
      },
      "message": "Merge pull request #2764 from skeeto/fix-recovery\n\nFix deps log recovery failing to remove corrupt records"
    },
    {
      "commit": "e1707b46db6d77a3f95e32c52e4a67ca549b0c94",
      "tree": "af2df4231fb22ec462ca5fc18a7d86dec0ded000",
      "parents": [
        "54ce433b09aaa59051c3ad24d3310734f382cd1d"
      ],
      "author": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Sun Apr 12 10:26:56 2026 -0400"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Sun Apr 12 10:26:56 2026 -0400"
      },
      "message": "Add support for FORCE_COLOR. (For now) comment out NO_COLOR logic\n"
    },
    {
      "commit": "cedf78d68a9fd1a3233e59569455e1f3f8c19680",
      "tree": "f20cd22708f95b6ef62e1b5004a149281f35e3f0",
      "parents": [
        "947aade8495004d5b0911a19d27433c57225a94c",
        "f7da4459d0b4163084523d7815f401c35bcb1d6e"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Apr 12 15:33:53 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 12 15:33:53 2026 +0200"
      },
      "message": "Merge pull request #2739 from jhasse/exclude-validation-edges-from-compdb\n\ncompdb: Exclude validation-only edges from compile_commands.json"
    },
    {
      "commit": "93e431abd3e8bad89f076a2beab7b1e4598985c7",
      "tree": "58645988e72fc0fff816563a8e67794942956aee",
      "parents": [
        "947aade8495004d5b0911a19d27433c57225a94c"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Apr 12 15:25:27 2026 +0200"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Apr 12 15:25:27 2026 +0200"
      },
      "message": "Fall back to $builddir/target when target lookup fails\n\nWhen $builddir is set in the manifest, passing \"foo\" on the command\nline now checks for a target named \"foo\" first, then falls back to\n\"$builddir/foo\" before reporting an error.\n"
    },
    {
      "commit": "947aade8495004d5b0911a19d27433c57225a94c",
      "tree": "c8dec8954b14651adfc16d58b3fc45a04177bc16",
      "parents": [
        "b90f3587711b2171d2dafa8179fe013475558e8d",
        "bbde7f3d77c05c36a1a1fdce170993960f822463"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Apr 12 12:57:25 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 12 12:57:25 2026 +0200"
      },
      "message": "Merge pull request #2753 from bradking/explain-dyndep\n\nRestore \"explain\" output when a dyndep file is loaded"
    },
    {
      "commit": "93d37d0cb101ad6e51875b86417feb99f94fc3d4",
      "tree": "eb6000dbf4eea397c3416328f3e18167e004c4c0",
      "parents": [
        "3f910ed8ce2ae611d31ee0ea7ea560c10f084393"
      ],
      "author": {
        "name": "Christopher Wellons",
        "email": "wellons@nullprogram.com",
        "time": "Sat Apr 11 20:24:20 2026 -0400"
      },
      "committer": {
        "name": "Christopher Wellons",
        "email": "wellons@nullprogram.com",
        "time": "Sat Apr 11 20:36:04 2026 -0400"
      },
      "message": "Add test for deps log duplicate path record recovery.\n\nAppends a duplicate path record to a valid deps log and verifies that\nrecovery truncates it away on the first load, and the second load\nsucceeds cleanly.\n"
    },
    {
      "commit": "3f910ed8ce2ae611d31ee0ea7ea560c10f084393",
      "tree": "522ca356e78b485518c2d000cc9e65ce96a319cc",
      "parents": [
        "b90f3587711b2171d2dafa8179fe013475558e8d"
      ],
      "author": {
        "name": "Christopher Wellons",
        "email": "wellons@nullprogram.com",
        "time": "Fri Apr 10 23:47:48 2026 -0400"
      },
      "committer": {
        "name": "Christopher Wellons",
        "email": "wellons@nullprogram.com",
        "time": "Fri Apr 10 23:55:06 2026 -0400"
      },
      "message": "Fix deps log recovery failing to remove corrupt records\n\nIn DepsLog::Load(), the file offset used for truncation-based recovery\nwas advanced past each record immediately after reading its bytes from\ndisk, but before validating the record\u0027s semantic correctness (e.g. the\npath checksum or node-id range checks). When a record was structurally\ncomplete but semantically invalid, recovery truncated the file to an\noffset that included the bad record, so it was never removed.\n\nThis created an infinite cycle: every build would load the deps log, hit\nthe corrupt record, \"recover\" by truncating everything after it (but not\nthe record itself), then append new dependency records that would be\ndestroyed by the next build\u0027s recovery. The result was spurious rebuilds\non every invocation.\n\nMove the offset update to the end of the loop body, after all validation\nhas passed. Now when a record fails validation, the offset still points\nbefore it, and truncation correctly removes it.\n\nFixes #2703\n"
    },
    {
      "commit": "54ce433b09aaa59051c3ad24d3310734f382cd1d",
      "tree": "089e0979b30bf31362d01fe81038dc58e61fa2b3",
      "parents": [
        "467483fc5c8954cd0e7d19410136c8c68f42ad30"
      ],
      "author": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Fri Apr 10 15:04:21 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 15:04:21 2026 -0400"
      },
      "message": "Clean unneeded comment"
    },
    {
      "commit": "467483fc5c8954cd0e7d19410136c8c68f42ad30",
      "tree": "28863f7dcf1c5cdb281c148b92a4710ad6c128c9",
      "parents": [
        "0d80e3c79211986b90c64d27578d8021b4a3b4c7"
      ],
      "author": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Fri Apr 10 14:46:52 2026 -0400"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Fri Apr 10 14:46:52 2026 -0400"
      },
      "message": "Implement helper functions for NO_COLOR and CLICOLOR_FORCE\n"
    },
    {
      "commit": "0d80e3c79211986b90c64d27578d8021b4a3b4c7",
      "tree": "511d0229f4c02e2c0144388f731fb14541d71123",
      "parents": [
        "ad4a073bb5aba119749f1526994c436e59818163"
      ],
      "author": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Sat Apr 04 08:52:58 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 04 08:52:58 2026 -0400"
      },
      "message": "Fix `getenv`"
    },
    {
      "commit": "ad4a073bb5aba119749f1526994c436e59818163",
      "tree": "eab2d6322f4d3e38352ee6f2b5b7c274087e3027",
      "parents": [
        "b90f3587711b2171d2dafa8179fe013475558e8d"
      ],
      "author": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Sat Apr 04 08:47:05 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 04 08:47:05 2026 -0400"
      },
      "message": "Check `NO_COLOR` flag before `CLICOLOR_FORCE`\n\nIn response to Issue #2295 (work in progress)."
    },
    {
      "commit": "bbde7f3d77c05c36a1a1fdce170993960f822463",
      "tree": "f4e76444ff37c0ac8516392950adff587be7afd0",
      "parents": [
        "b7bbeec9ae19e81c5b009525aebf3f2275b48d79"
      ],
      "author": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Fri Mar 20 20:20:20 2026 -0400"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Fri Apr 03 09:17:16 2026 -0400"
      },
      "message": "Restore \"explain\" output when a dyndep file is loaded\n\nSince commit 8e6c741a4b (\"explain\" debug prints just before each command\nis run, 2022-01-06, v1.13.0~1^2~56^2~2) the \"loading dyndep file \u0027...\u0027\"\nexplanation has not been printed.  Instead the explanation has been\nrecorded for the dyndep file\u0027s node *after* it has been brought\nup-to-date, and therefore never printed.\n\nThis explanation is generated just before its operation runs, so we can\nprint it immediately instead of buffering it.\n\nFixes: #2758\n"
    },
    {
      "commit": "b7bbeec9ae19e81c5b009525aebf3f2275b48d79",
      "tree": "114de3e69607d13f71be9b6b0fff58ca00fa9296",
      "parents": [
        "1ad778bff7b01ea2fd9432f3ba5ac324d899fb3d"
      ],
      "author": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Thu Mar 26 12:36:57 2026 -0400"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Fri Apr 03 09:17:16 2026 -0400"
      },
      "message": "Add test for `ninja -d explain` with dyndep\n\nThis was regressed by commit 8e6c741a4b (\"explain\" debug prints just\nbefore each command is run, 2022-01-06, v1.13.0~1^2~56^2~2).  Add a\ntest demonstrating the problems, called out by FIXME comments.\n\nIssue: #2758, #2759\n"
    },
    {
      "commit": "1ad778bff7b01ea2fd9432f3ba5ac324d899fb3d",
      "tree": "cab4902e83d78adccd41e5e73270e5a66bc7ed2a",
      "parents": [
        "2dc18d33d7aa8e27d292157f74ef465a70507a5b"
      ],
      "author": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Thu Mar 26 14:48:52 2026 -0400"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Fri Apr 03 09:16:40 2026 -0400"
      },
      "message": "Migrate explanation printing from StatusPrinter to Explanations\n\nIt makes more sense to live in the latter.\n\nSuggested-by: David \u0027Digit\u0027 Turner \u003cdigit+github@google.com\u003e\n"
    },
    {
      "commit": "2dc18d33d7aa8e27d292157f74ef465a70507a5b",
      "tree": "04474beb86d34780a7e3917924d013b963b763b6",
      "parents": [
        "a37b2ce615eb8e9710e9298b3c05f6b41fc71272"
      ],
      "author": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Thu Mar 26 14:36:59 2026 -0400"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Wed Apr 01 14:08:58 2026 -0400"
      },
      "message": "Factor out implementation of Explanations into a dedicated source\n"
    },
    {
      "commit": "b90f3587711b2171d2dafa8179fe013475558e8d",
      "tree": "7b0646342b6d1d5fb6d5425c8c1c38053965524a",
      "parents": [
        "85f4e5e2f9e269402eb1f5f82cb9c0291faeaf9f",
        "f42b6142846cbcede1f1c3ca923a93af67180a22"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Fri Mar 27 16:33:14 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 16:33:14 2026 +0100"
      },
      "message": "Merge pull request #2756 from bradking/graph-visit-cleanup\n\nImprove readability of dyndep, depfile, and validation node logic"
    },
    {
      "commit": "f42b6142846cbcede1f1c3ca923a93af67180a22",
      "tree": "47016b20a336a8c3b5a7b3ff5c404aff3a2fa306",
      "parents": [
        "882af5e3621bca06386b2f68f161ac172f363f9e"
      ],
      "author": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Fri Mar 20 22:33:21 2026 -0400"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Thu Mar 26 17:47:16 2026 -0400"
      },
      "message": "Simplify logic that updates an edge from dyndep and depfile bindings\n\nRecomputeNodeDirty checks both dyndep and depfile bindings when an edge\nis first encountered.  Consolidate them into a single conditional block.\nThis simplification was missed in commit 0f0fb3275d (Teach RecomputeDirty\nto load dyndep files that are ready, 2015-11-05, v1.10.0~1^2~53^2~7).\n"
    },
    {
      "commit": "85f4e5e2f9e269402eb1f5f82cb9c0291faeaf9f",
      "tree": "da246aa23cde5bffbc82a6ca2769e13b40b75494",
      "parents": [
        "57157f677760f4da3a3e5f20bc3797ba04f6cb6d",
        "ec78f228477faa59e614e14737d4c008f95cc60a"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Thu Mar 26 22:34:50 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 22:34:50 2026 +0100"
      },
      "message": "Merge pull request #2750 from lklivingstone/fix/browse-url-encode\n\nFix/browse url encode"
    },
    {
      "commit": "882af5e3621bca06386b2f68f161ac172f363f9e",
      "tree": "a2cbcea2ca76711a85b9daee74ef79d3c9b1d655",
      "parents": [
        "79482d3b41abacce99ba227849b2a91b4664dd5c"
      ],
      "author": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Thu Mar 26 14:09:00 2026 -0400"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Thu Mar 26 14:11:42 2026 -0400"
      },
      "message": "Explicitly load a node\u0027s mtime before comparing it to the deps log\n\nPreviously we were relying on RecomputeNodeDirty to do\nthis before LoadDeps.  Avoid this non-local assumption.\n\nSuggestd-by: David \u0027Digit\u0027 Turner \u003cdigit+github@google.com\u003e\n"
    },
    {
      "commit": "ec78f228477faa59e614e14737d4c008f95cc60a",
      "tree": "d1140cb893e2dd132ca75a36c598d32577c12bef",
      "parents": [
        "5ff92d8a51b7af43aa53df0ad733c2c3e0120d4f"
      ],
      "author": {
        "name": "lklivingstone",
        "email": "livingstone.lk.337@gmail.com",
        "time": "Mon Mar 23 22:50:11 2026 +0530"
      },
      "committer": {
        "name": "lklivingstone",
        "email": "livingstone.lk.337@gmail.com",
        "time": "Thu Mar 26 21:42:45 2026 +0530"
      },
      "message": "fix URL-encode targets in -t browse\n\nThe browse tool did not correctly encode targets containing \u0027%\u0027, causing them to be interpreted incorrectly after URL decoding.\nFix this by URL-encoding targets using urllib.parse.quote when generating links.\n\nThe import changes are compatible with both Python 2.7 and Python 3.x.\n\nAdditionally included a test to ensure complex target names are preserved exactly during parsing.\n\nFixes #2652\n"
    },
    {
      "commit": "79482d3b41abacce99ba227849b2a91b4664dd5c",
      "tree": "227339dff3e7915917b284e98e46be502a7116ce",
      "parents": [
        "57157f677760f4da3a3e5f20bc3797ba04f6cb6d"
      ],
      "author": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Fri Mar 20 21:06:40 2026 -0400"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Thu Mar 26 09:42:01 2026 -0400"
      },
      "message": "Queue an edge\u0027s validation nodes before *all* inputs\n\nPreviously a dyndep binding could cause one input to be traversed\nbefore queuing the validation nodes of the current edge.  This does\nnot affect correctness, but it makes the code easier to follow.\n"
    },
    {
      "commit": "57157f677760f4da3a3e5f20bc3797ba04f6cb6d",
      "tree": "0cdc94b2411a8b3b12fad29b80c8a5bebceb8c6b",
      "parents": [
        "a37b2ce615eb8e9710e9298b3c05f6b41fc71272",
        "1cda4274d941125aab6e798909ecb400f3cd2d2e"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Mar 25 18:50:20 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 18:50:20 2026 +0100"
      },
      "message": "Merge pull request #2754 from bradking/doc-dyndep\n\nDocument more precisely how a dyndep file may affect the build graph"
    },
    {
      "commit": "1cda4274d941125aab6e798909ecb400f3cd2d2e",
      "tree": "0cdc94b2411a8b3b12fad29b80c8a5bebceb8c6b",
      "parents": [
        "a37b2ce615eb8e9710e9298b3c05f6b41fc71272"
      ],
      "author": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Tue Mar 24 16:59:22 2026 -0400"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Tue Mar 24 16:59:22 2026 -0400"
      },
      "message": "Document more precisely how a dyndep file may affect the build graph\n\nOnly the part of the graph that depends on the edges with a dyndep\nbinding may be affected by content loaded from the dyndep file.\nOtherwise the dyndep file could change the build graph in a way that\ncauses already up-to-date build statements to become out-of-date.\n"
    },
    {
      "commit": "a37b2ce615eb8e9710e9298b3c05f6b41fc71272",
      "tree": "a5c1679b5a4fe9c0ba8ce434bf0a8e18e4635b36",
      "parents": [
        "c04c5578f2a454ddd5c14f10df48f8b19b5a949c",
        "36c1fd98332935b08b7e7e57b9ac8ac66055c7b5"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Mar 24 21:42:01 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 21:42:01 2026 +0100"
      },
      "message": "Merge pull request #2749 from bradking/graph-visit-order\n\nVisit all of an edge\u0027s inputs before checking if any is ready"
    },
    {
      "commit": "c04c5578f2a454ddd5c14f10df48f8b19b5a949c",
      "tree": "e6687c4ead3f7b97f1f44f495b798eabf6e533c4",
      "parents": [
        "297718e2b5d3c6cb053154261d7acbee62e6c521",
        "258ec103025a176e737699149d72be5d101975be"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Mar 24 21:33:02 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 21:33:02 2026 +0100"
      },
      "message": "Merge pull request #2747 from cuiweixie/fix/lexer-version-check-operator\n\nfix: use \u003d\u003d instead of \u003d in newline escape version check"
    },
    {
      "commit": "297718e2b5d3c6cb053154261d7acbee62e6c521",
      "tree": "b77e79eff36fe27f3906e4a910b4d2ef0aec1153",
      "parents": [
        "5ff92d8a51b7af43aa53df0ad733c2c3e0120d4f"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Mar 24 21:30:01 2026 +0100"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Mar 24 21:30:01 2026 +0100"
      },
      "message": "clang-tidy: bugprone-assignment-in-if-condition\n"
    },
    {
      "commit": "2ae7caf07ef10bb98ba16090aac0568486db9110",
      "tree": "b051578fb282910334f3390e769c6a562c0d073b",
      "parents": [
        "5ff92d8a51b7af43aa53df0ad733c2c3e0120d4f"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Sun Mar 22 07:18:43 2026 +0900"
      },
      "committer": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Tue Mar 24 09:29:05 2026 +0900"
      },
      "message": "Fix -t clean to remove all outputs of multi-output edges\n\nWhen cleaning a specific target with `ninja -t clean \u003ctarget\u003e`,\nDoCleanTarget only removed the named target file. For multi-output\nedges (e.g. `build a.txt | b.txt: gen in.txt`), the other outputs\nwere left behind even though they are produced by the same command\nand cannot be rebuilt independently.\n\nFix by iterating over all edge outputs in DoCleanTarget, consistent\nwith how CleanAll already handles multi-output edges.\n"
    },
    {
      "commit": "36c1fd98332935b08b7e7e57b9ac8ac66055c7b5",
      "tree": "539c44c914610f79a4cd5aaf6c2e3cdccfe5849f",
      "parents": [
        "5ff92d8a51b7af43aa53df0ad733c2c3e0120d4f"
      ],
      "author": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Sun Mar 22 11:34:28 2026 -0400"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Sun Mar 22 14:12:40 2026 -0400"
      },
      "message": "Visit all of an edge\u0027s inputs before checking if any is ready\n\nNewly encountered edges may load dyndep files and gain outputs that\ncorrespond to some of our inputs.  In that case those inputs\u0027 readiness\nis determined by their edges instead of just mtimes.\n\nFixes: #2641\n"
    },
    {
      "commit": "258ec103025a176e737699149d72be5d101975be",
      "tree": "6e913ba0de5b1c860c025e9703bf357acd910502",
      "parents": [
        "5ff92d8a51b7af43aa53df0ad733c2c3e0120d4f"
      ],
      "author": {
        "name": "Weixie Cui",
        "email": "cuiweixie@gmail.com",
        "time": "Fri Mar 20 23:13:52 2026 +0800"
      },
      "committer": {
        "name": "Weixie Cui",
        "email": "cuiweixie@gmail.com",
        "time": "Fri Mar 20 23:14:02 2026 +0800"
      },
      "message": "fix: use \u003d\u003d instead of \u003d in newline escape version check\n\nThe condition used assignment (\u003d) instead of comparison (\u003d\u003d), which would\nalways evaluate to true and break the version check logic.\n"
    },
    {
      "commit": "389d044d93c11ab18b8231af0c06888037994b4e",
      "tree": "34824de48a6cf4752c5fbdba53d082f53dd68515",
      "parents": [
        "5ff92d8a51b7af43aa53df0ad733c2c3e0120d4f"
      ],
      "author": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Wed Mar 18 10:55:52 2026 -0400"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 18 10:55:52 2026 -0400"
      },
      "message": "Document `pool` option under \"Rule Variables\"\n\nIn response to Issue #2732."
    },
    {
      "commit": "1a7da2b33abfca8c75467deac82c726c9ff6dcfc",
      "tree": "a6185cbd559e4cd4082114793aa7a5138ac83e29",
      "parents": [
        "8af25f12aebf30014e0e2329cd18662ad94e233d"
      ],
      "author": {
        "name": "jamesl-10",
        "email": "khljameslee@gmail.com",
        "time": "Wed Feb 18 02:20:33 2026 -0500"
      },
      "committer": {
        "name": "jamesl-10",
        "email": "khljameslee@gmail.com",
        "time": "Mon Mar 16 21:02:25 2026 -0400"
      },
      "message": "Added regression test for jobserver token availability\n"
    },
    {
      "commit": "8af25f12aebf30014e0e2329cd18662ad94e233d",
      "tree": "d0a7e8492c510acaa80314bb091b36bea6a94f84",
      "parents": [
        "9ec8b855fa22c82462958b032d8bc4733837805d"
      ],
      "author": {
        "name": "jamesl-10",
        "email": "khljameslee@gmail.com",
        "time": "Wed Feb 18 22:41:12 2026 -0500"
      },
      "committer": {
        "name": "jamesl-10",
        "email": "khljameslee@gmail.com",
        "time": "Mon Mar 16 20:46:56 2026 -0400"
      },
      "message": "Capture runner states in BuildResult algebraic data type\n"
    },
    {
      "commit": "5ff92d8a51b7af43aa53df0ad733c2c3e0120d4f",
      "tree": "ee1417511286df9f78226f164f773e044156be1d",
      "parents": [
        "0cd88be82de8fc7ecb3a66e5af4850145f81c90b",
        "293b34d433f89ee24721ebd5d11fdd6ee1bde661"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Mon Mar 09 22:56:27 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 22:56:27 2026 +0100"
      },
      "message": "Merge pull request #2741 from adrian-javid/editor_config_python_indent_size_4\n\nset EditorConfig to use indent size of 4 for Python files"
    },
    {
      "commit": "293b34d433f89ee24721ebd5d11fdd6ee1bde661",
      "tree": "ee1417511286df9f78226f164f773e044156be1d",
      "parents": [
        "0cd88be82de8fc7ecb3a66e5af4850145f81c90b"
      ],
      "author": {
        "name": "Adrian",
        "email": "73155005+adrian-javid@users.noreply.github.com",
        "time": "Sat Mar 07 21:53:45 2026 -0600"
      },
      "committer": {
        "name": "Adrian",
        "email": "73155005+adrian-javid@users.noreply.github.com",
        "time": "Sat Mar 07 21:53:45 2026 -0600"
      },
      "message": "update `.editorconfig` such that indent size of 4 is used for Python files\n"
    },
    {
      "commit": "f7da4459d0b4163084523d7815f401c35bcb1d6e",
      "tree": "6c4aeb6d26db7a48bafd9fc292844ec47405d3f4",
      "parents": [
        "8e0d1fff22a3ecd9844607e057a068b5a2c9b7bd"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Mar 04 22:02:50 2026 +0100"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Mar 04 22:02:50 2026 +0100"
      },
      "message": "compdb: Exclude validation-only edges from compile_commands.json\n"
    },
    {
      "commit": "8e0d1fff22a3ecd9844607e057a068b5a2c9b7bd",
      "tree": "82154079178a4475759426af88f306129b40c218",
      "parents": [
        "0cd88be82de8fc7ecb3a66e5af4850145f81c90b"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Mar 04 21:58:31 2026 +0100"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Mar 04 21:58:31 2026 +0100"
      },
      "message": "Add integration test to see if compdb tool includes validation-only edges\n"
    },
    {
      "commit": "9ec8b855fa22c82462958b032d8bc4733837805d",
      "tree": "c98c7275449afc029cc4f54a392d66683462007c",
      "parents": [
        "16000e115d1a200ca50a61e73466e52a918c0a9f"
      ],
      "author": {
        "name": "jamesl-10",
        "email": "khljameslee@gmail.com",
        "time": "Wed Feb 18 02:14:30 2026 -0500"
      },
      "committer": {
        "name": "jamesl-10",
        "email": "khljameslee@gmail.com",
        "time": "Tue Mar 03 23:06:29 2026 -0500"
      },
      "message": "Handle jobserver token availability in runner\n"
    },
    {
      "commit": "16000e115d1a200ca50a61e73466e52a918c0a9f",
      "tree": "0b306948d9ba6c2910640ec4d7183457f83ef243",
      "parents": [
        "0cd88be82de8fc7ecb3a66e5af4850145f81c90b"
      ],
      "author": {
        "name": "jamesl-10",
        "email": "khljameslee@gmail.com",
        "time": "Wed Feb 18 01:35:14 2026 -0500"
      },
      "committer": {
        "name": "jamesl-10",
        "email": "khljameslee@gmail.com",
        "time": "Tue Mar 03 23:06:29 2026 -0500"
      },
      "message": "Change SubprocessSet::DoWork to react to Jobserver token availability\n"
    },
    {
      "commit": "0cd88be82de8fc7ecb3a66e5af4850145f81c90b",
      "tree": "dfc23cac969c21dbcbc4f7569329fb0c79d9c09c",
      "parents": [
        "131337bf5c52b4f45b21afcaba3bc51007f0740a",
        "03ec8c658e6a94babb9fe766c4fb77d2761a4d46"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Mar 03 22:09:51 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 03 22:09:51 2026 +0100"
      },
      "message": "Merge pull request #2729 from codesuki/validations\n\nFix spurious rebuilds for phony targets with validations"
    },
    {
      "commit": "8a2d5fb340934050a4b42224265360eb7b37cc7b",
      "tree": "e7d951140477c73f35775c6cfa1f30cac1bdef4e",
      "parents": [
        "131337bf5c52b4f45b21afcaba3bc51007f0740a"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Mar 02 08:59:27 2026 +0000"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 08:59:27 2026 +0000"
      },
      "message": "Bump actions/upload-artifact from 6 to 7\n\nBumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.\n- [Release notes](https://github.com/actions/upload-artifact/releases)\n- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/upload-artifact\n  dependency-version: \u00277\u0027\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e"
    },
    {
      "commit": "131337bf5c52b4f45b21afcaba3bc51007f0740a",
      "tree": "d59f6ece23ecb53ee142a5ce995f097ef205ec80",
      "parents": [
        "b227a2d8b8ccab8533dcef4147f316b1c03542d6"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Thu Feb 26 22:43:37 2026 +0100"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Thu Feb 26 22:43:37 2026 +0100"
      },
      "message": "Fix typo, improve formatting in README.md\n"
    },
    {
      "commit": "b227a2d8b8ccab8533dcef4147f316b1c03542d6",
      "tree": "b5d3a234973665ff126267d9351a25518df46d6c",
      "parents": [
        "394ba36e5dfd9edd1768d89e2ff12b8e3a8db00a",
        "e7fcd463403f6698386645e1dfb6152a1a342c75"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Thu Feb 26 21:10:52 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 21:10:52 2026 +0100"
      },
      "message": "Merge pull request #2736 from haosenwang1018/fix/bare-excepts\n\nfix: replace 2 bare except clauses with except Exception"
    },
    {
      "commit": "394ba36e5dfd9edd1768d89e2ff12b8e3a8db00a",
      "tree": "d38b71b405afb7a88ab3b4609f0114e73df5a449",
      "parents": [
        "bf070e07538495043bc3879db198a9d2f859123e",
        "35976f0303726e80cc5fb082aac5611ea964468d"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Thu Feb 26 21:10:11 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 21:10:11 2026 +0100"
      },
      "message": "Merge pull request #2737 from zufuliu/msvc-c++17\n\nUpdate MSVC C++ standard to C++17, see PR #2734."
    },
    {
      "commit": "35976f0303726e80cc5fb082aac5611ea964468d",
      "tree": "d38b71b405afb7a88ab3b4609f0114e73df5a449",
      "parents": [
        "bf070e07538495043bc3879db198a9d2f859123e"
      ],
      "author": {
        "name": "zufuliu",
        "email": "zufuliu@gmail.com",
        "time": "Thu Feb 26 20:01:23 2026 +0800"
      },
      "committer": {
        "name": "zufuliu",
        "email": "zufuliu@gmail.com",
        "time": "Thu Feb 26 20:01:23 2026 +0800"
      },
      "message": "Update MSVC C++ standard to C++17, see PR #2734.\n"
    },
    {
      "commit": "e7fcd463403f6698386645e1dfb6152a1a342c75",
      "tree": "6bfeb86055cd1337c838383ad9cb1986c9ca5370",
      "parents": [
        "bf070e07538495043bc3879db198a9d2f859123e"
      ],
      "author": {
        "name": "haosenwang1018",
        "email": "167664334+haosenwang1018@users.noreply.github.com",
        "time": "Thu Feb 26 05:33:09 2026 +0000"
      },
      "committer": {
        "name": "haosenwang1018",
        "email": "167664334+haosenwang1018@users.noreply.github.com",
        "time": "Thu Feb 26 05:33:09 2026 +0000"
      },
      "message": "fix: replace 2 bare except clauses with except Exception\n"
    },
    {
      "commit": "bf070e07538495043bc3879db198a9d2f859123e",
      "tree": "6a9da7aba9bc4e85760d861f2747dc358e0ba5b1",
      "parents": [
        "4d76392b37866904a43583edafeff98e314f6ac0"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Feb 25 21:43:32 2026 +0100"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Feb 25 21:44:22 2026 +0100"
      },
      "message": "Only allow integers for pool depth (no implicit conversion to 0)\n\nFixes #2733.\n"
    },
    {
      "commit": "4d76392b37866904a43583edafeff98e314f6ac0",
      "tree": "dda4fdc2486ce3e12dd66ebcd51dc945af87c2e0",
      "parents": [
        "6191ee39eb5fbf91ef8a950f76d8f7661a15dd9b",
        "04ba29b8e8953999c411dec613f3d52351b20bef"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Feb 25 21:42:01 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 25 21:42:01 2026 +0100"
      },
      "message": "Merge pull request #2734 from jhasse/cxx17\n\nBump C++14 to C++17"
    },
    {
      "commit": "04ba29b8e8953999c411dec613f3d52351b20bef",
      "tree": "dda4fdc2486ce3e12dd66ebcd51dc945af87c2e0",
      "parents": [
        "6191ee39eb5fbf91ef8a950f76d8f7661a15dd9b"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Feb 25 21:28:16 2026 +0100"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Feb 25 21:28:16 2026 +0100"
      },
      "message": "Bump C++14 to C++17\n"
    },
    {
      "commit": "6191ee39eb5fbf91ef8a950f76d8f7661a15dd9b",
      "tree": "87dc8609bab7ede3deef6a8ac0d9935e80776451",
      "parents": [
        "cc60300ab94dae9bb28fece3c9b7c397235b17de",
        "3fdd1796b96e14bd904ca0d46d39809712a7952c"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Feb 25 21:20:29 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 25 21:20:29 2026 +0100"
      },
      "message": "Merge pull request #2730 from jhasse/restat-with-builddir\n\n\"ninja -t restat\" doesn\u0027t work with \"builddir\""
    },
    {
      "commit": "3fdd1796b96e14bd904ca0d46d39809712a7952c",
      "tree": "87dc8609bab7ede3deef6a8ac0d9935e80776451",
      "parents": [
        "8161d3ac87e530ad65f3096d0a461aabf06e3b7a"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Feb 17 21:33:45 2026 +0100"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Feb 17 21:33:45 2026 +0100"
      },
      "message": "restat tool: Add --builddir\u003dDIR; might be needed because manifest won\u0027t be parsed\n"
    },
    {
      "commit": "8161d3ac87e530ad65f3096d0a461aabf06e3b7a",
      "tree": "38396e1ee122f1f0ffec899c0bd77bc7cc2da7ba",
      "parents": [
        "cc60300ab94dae9bb28fece3c9b7c397235b17de"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Mon Feb 16 12:38:45 2026 +0100"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Mon Feb 16 12:38:45 2026 +0100"
      },
      "message": "Add an integration test for \"ninja -t restat\"\n"
    },
    {
      "commit": "03ec8c658e6a94babb9fe766c4fb77d2761a4d46",
      "tree": "90e514a734a445d64c1a3183354486a334a92096",
      "parents": [
        "43aa6e3a34150460512b3576859af7afdefa17e8"
      ],
      "author": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Mon Feb 16 13:59:34 2026 +0900"
      },
      "committer": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Mon Feb 16 13:59:34 2026 +0900"
      },
      "message": "fixup! fixup! fixup! Fix spurious rebuilds for phony targets with validations\n"
    },
    {
      "commit": "43aa6e3a34150460512b3576859af7afdefa17e8",
      "tree": "d48967150eb2a762975cbf788e13d393206bbd94",
      "parents": [
        "b5f70eed10a8239401830ef74d8bc0b64f9a8f47"
      ],
      "author": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Mon Feb 16 13:57:30 2026 +0900"
      },
      "committer": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Mon Feb 16 13:57:30 2026 +0900"
      },
      "message": "fixup! fixup! Fix spurious rebuilds for phony targets with validations\n"
    },
    {
      "commit": "b5f70eed10a8239401830ef74d8bc0b64f9a8f47",
      "tree": "f5bf77542521491e8c0f4a3d0331f8d4d0b50ab6",
      "parents": [
        "15c7373ba8b69e6159bdccf22ac15168504708e4"
      ],
      "author": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Mon Feb 16 13:52:32 2026 +0900"
      },
      "committer": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Mon Feb 16 13:52:32 2026 +0900"
      },
      "message": "fixup! Fix spurious rebuilds for phony targets with validations\n"
    }
  ],
  "next": "15c7373ba8b69e6159bdccf22ac15168504708e4"
}
