)]}'
{
  "log": [
    {
      "commit": "06191e72d2710ea80a9ff2fb5f7faa0eee22dda6",
      "tree": "c0cac0a1fca2f1b35f1cae8d6b80fdef81f9e543",
      "parents": [
        "f735970600b5713276583589dce207d575950b14",
        "d128826522bbb4a0d9650e0d3b9bc47f33d5bf81"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Jun 16 07:33:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 16 07:33:23 2026"
      },
      "message": "Merge pull request #2796 from orgads/tests-pipe\n\nTests: Use context manager for Popen"
    },
    {
      "commit": "d128826522bbb4a0d9650e0d3b9bc47f33d5bf81",
      "tree": "c0cac0a1fca2f1b35f1cae8d6b80fdef81f9e543",
      "parents": [
        "f735970600b5713276583589dce207d575950b14"
      ],
      "author": {
        "name": "Orgad Shaneh",
        "email": "orgad.shaneh@audiocodes.com",
        "time": "Sun Jun 14 09:29:24 2026"
      },
      "committer": {
        "name": "Orgad Shaneh",
        "email": "orgad.shaneh@audiocodes.com",
        "time": "Sun Jun 14 11:45:11 2026"
      },
      "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 11:00:03 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 14 11:00:03 2026"
      },
      "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 10:58:34 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 14 10:58:34 2026"
      },
      "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 10:54:42 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 14 10:54:42 2026"
      },
      "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 10:47:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 14 10:47:53 2026"
      },
      "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": "Sat Jun 13 21:36:15 2026"
      },
      "committer": {
        "name": "Orgad Shaneh",
        "email": "orgad.shaneh@audiocodes.com",
        "time": "Sat Jun 13 21:37:06 2026"
      },
      "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 16:29:16 2026"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Tue Jun 09 20:06:20 2026"
      },
      "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 15:09:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 15:09:24 2026"
      },
      "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 15:05:47 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 21 15:05:47 2026"
      },
      "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 16:44:39 2026"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Wed May 20 16:44:39 2026"
      },
      "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 23:34:14 2026"
      },
      "committer": {
        "name": "scivision",
        "email": "scivision@users.noreply.github.com",
        "time": "Fri May 15 23:34:14 2026"
      },
      "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": "2a8ddccd35fbe9cd235fbda192cc941dcdb3efcf",
      "tree": "95710f41f90dda6daafb8361091af7afd4d41a6b",
      "parents": [
        "166d02307de7d38a6c953c7ef3a0b5f9c956119d",
        "0f555577288a1c4a672bc7121904dfc092b390f0"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed May 13 20:12:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 13 20:12:35 2026"
      },
      "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 19:06:00 2026"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed May 13 19:06:00 2026"
      },
      "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 13:56:37 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 11 13:56:37 2026"
      },
      "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 20:00:37 2026"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sat May 09 20:00:37 2026"
      },
      "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": "Fri May 08 22:04:15 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 08 22:04:15 2026"
      },
      "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": "Fri May 08 22:02:23 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 08 22:02:23 2026"
      },
      "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": "Fri May 08 22:00:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 08 22:00:58 2026"
      },
      "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 09:27:48 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri May 08 09:27:48 2026"
      },
      "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 19:26:59 2026"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Mon May 04 19:26:59 2026"
      },
      "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 16:21:08 2026"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Mon May 04 16:21:08 2026"
      },
      "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 14:04:57 2026"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Thu Apr 30 14:04:57 2026"
      },
      "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 14:20:59 2026"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Tue Apr 28 14:20:59 2026"
      },
      "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 06:11:46 2026"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Apr 28 06:11:46 2026"
      },
      "message": "Address comments\n"
    },
    {
      "commit": "a830ae5b156f899b6c42043a8d8d284120c0a893",
      "tree": "1131af2c25753cdca10a501c151187860d2c3e29",
      "parents": [
        "def9560a0b6d755936e615ce443a0aec45c39bdb",
        "1a7da2b33abfca8c75467deac82c726c9ff6dcfc"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Apr 28 05:51:10 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Apr 28 05:51:10 2026"
      },
      "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 14:45:25 2026"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Thu Apr 23 14:45:25 2026"
      },
      "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 19:11:06 2026"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Fri Apr 17 19:11:06 2026"
      },
      "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 19:05:56 2026"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Fri Apr 17 19:05:56 2026"
      },
      "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 12:54:39 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Apr 13 12:54:39 2026"
      },
      "message": "Simplify helper functions"
    },
    {
      "commit": "def9560a0b6d755936e615ce443a0aec45c39bdb",
      "tree": "f1c071efeb8666292627875a689eb1bb1070cce9",
      "parents": [
        "cedf78d68a9fd1a3233e59569455e1f3f8c19680",
        "93d37d0cb101ad6e51875b86417feb99f94fc3d4"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Sun Apr 12 16:45:24 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 12 16:45:24 2026"
      },
      "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 14:26:56 2026"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Sun Apr 12 14:26:56 2026"
      },
      "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 13:33:53 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 12 13:33:53 2026"
      },
      "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 13:25:27 2026"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Apr 12 13:25:27 2026"
      },
      "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 10:57:25 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Apr 12 10:57:25 2026"
      },
      "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": "Sun Apr 12 00:24:20 2026"
      },
      "committer": {
        "name": "Christopher Wellons",
        "email": "wellons@nullprogram.com",
        "time": "Sun Apr 12 00:36:04 2026"
      },
      "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": "Sat Apr 11 03:47:48 2026"
      },
      "committer": {
        "name": "Christopher Wellons",
        "email": "wellons@nullprogram.com",
        "time": "Sat Apr 11 03:55:06 2026"
      },
      "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 19:04:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Apr 10 19:04:21 2026"
      },
      "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 18:46:52 2026"
      },
      "committer": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Fri Apr 10 18:46:52 2026"
      },
      "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 12:52:58 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 04 12:52:58 2026"
      },
      "message": "Fix `getenv`"
    },
    {
      "commit": "ad4a073bb5aba119749f1526994c436e59818163",
      "tree": "eab2d6322f4d3e38352ee6f2b5b7c274087e3027",
      "parents": [
        "b90f3587711b2171d2dafa8179fe013475558e8d"
      ],
      "author": {
        "name": "Brayden Krus",
        "email": "151576863+braydenkrus@users.noreply.github.com",
        "time": "Sat Apr 04 12:47:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Apr 04 12:47:05 2026"
      },
      "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": "Sat Mar 21 00:20:20 2026"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Fri Apr 03 13:17:16 2026"
      },
      "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 16:36:57 2026"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Fri Apr 03 13:17:16 2026"
      },
      "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 18:48:52 2026"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Fri Apr 03 13:16:40 2026"
      },
      "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 18:36:59 2026"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Wed Apr 01 18:08:58 2026"
      },
      "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 15:33:14 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 27 15:33:14 2026"
      },
      "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": "Sat Mar 21 02:33:21 2026"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Thu Mar 26 21:47:16 2026"
      },
      "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 21:34:50 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 26 21:34:50 2026"
      },
      "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 18:09:00 2026"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Thu Mar 26 18:11:42 2026"
      },
      "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 17:20:11 2026"
      },
      "committer": {
        "name": "lklivingstone",
        "email": "livingstone.lk.337@gmail.com",
        "time": "Thu Mar 26 16:12:45 2026"
      },
      "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": "Sat Mar 21 01:06:40 2026"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Thu Mar 26 13:42:01 2026"
      },
      "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 17:50:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 25 17:50:20 2026"
      },
      "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 20:59:22 2026"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Tue Mar 24 20:59:22 2026"
      },
      "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 20:42:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 20:42:01 2026"
      },
      "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 20:33:02 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 24 20:33:02 2026"
      },
      "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 20:30:01 2026"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Mar 24 20:30:01 2026"
      },
      "message": "clang-tidy: bugprone-assignment-in-if-condition\n"
    },
    {
      "commit": "2ae7caf07ef10bb98ba16090aac0568486db9110",
      "tree": "b051578fb282910334f3390e769c6a562c0d073b",
      "parents": [
        "5ff92d8a51b7af43aa53df0ad733c2c3e0120d4f"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Sat Mar 21 22:18:43 2026"
      },
      "committer": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Tue Mar 24 00:29:05 2026"
      },
      "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 15:34:28 2026"
      },
      "committer": {
        "name": "Brad King",
        "email": "brad.king@kitware.com",
        "time": "Sun Mar 22 18:12:40 2026"
      },
      "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 15:13:52 2026"
      },
      "committer": {
        "name": "Weixie Cui",
        "email": "cuiweixie@gmail.com",
        "time": "Fri Mar 20 15:14:02 2026"
      },
      "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 14:55:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Mar 18 14:55:52 2026"
      },
      "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 07:20:33 2026"
      },
      "committer": {
        "name": "jamesl-10",
        "email": "khljameslee@gmail.com",
        "time": "Tue Mar 17 01:02:25 2026"
      },
      "message": "Added regression test for jobserver token availability\n"
    },
    {
      "commit": "8af25f12aebf30014e0e2329cd18662ad94e233d",
      "tree": "d0a7e8492c510acaa80314bb091b36bea6a94f84",
      "parents": [
        "9ec8b855fa22c82462958b032d8bc4733837805d"
      ],
      "author": {
        "name": "jamesl-10",
        "email": "khljameslee@gmail.com",
        "time": "Thu Feb 19 03:41:12 2026"
      },
      "committer": {
        "name": "jamesl-10",
        "email": "khljameslee@gmail.com",
        "time": "Tue Mar 17 00:46:56 2026"
      },
      "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 21:56:27 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 09 21:56:27 2026"
      },
      "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": "Sun Mar 08 03:53:45 2026"
      },
      "committer": {
        "name": "Adrian",
        "email": "73155005+adrian-javid@users.noreply.github.com",
        "time": "Sun Mar 08 03:53:45 2026"
      },
      "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 21:02:50 2026"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Mar 04 21:02:50 2026"
      },
      "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 20:58:31 2026"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Mar 04 20:58:31 2026"
      },
      "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 07:14:30 2026"
      },
      "committer": {
        "name": "jamesl-10",
        "email": "khljameslee@gmail.com",
        "time": "Wed Mar 04 04:06:29 2026"
      },
      "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 06:35:14 2026"
      },
      "committer": {
        "name": "jamesl-10",
        "email": "khljameslee@gmail.com",
        "time": "Wed Mar 04 04:06:29 2026"
      },
      "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 21:09:51 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Mar 03 21:09:51 2026"
      },
      "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"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Mar 02 08:59:27 2026"
      },
      "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 21:43:37 2026"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Thu Feb 26 21:43:37 2026"
      },
      "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 20:10:52 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 20:10:52 2026"
      },
      "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 20:10:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 20:10:11 2026"
      },
      "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 12:01:23 2026"
      },
      "committer": {
        "name": "zufuliu",
        "email": "zufuliu@gmail.com",
        "time": "Thu Feb 26 12:01:23 2026"
      },
      "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"
      },
      "committer": {
        "name": "haosenwang1018",
        "email": "167664334+haosenwang1018@users.noreply.github.com",
        "time": "Thu Feb 26 05:33:09 2026"
      },
      "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 20:43:32 2026"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Feb 25 20:44:22 2026"
      },
      "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 20:42:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 25 20:42:01 2026"
      },
      "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 20:28:16 2026"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Feb 25 20:28:16 2026"
      },
      "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 20:20:29 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 25 20:20:29 2026"
      },
      "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 20:33:45 2026"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Feb 17 20:33:45 2026"
      },
      "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 11:38:45 2026"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Mon Feb 16 11:38:45 2026"
      },
      "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 04:59:34 2026"
      },
      "committer": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Mon Feb 16 04:59:34 2026"
      },
      "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 04:57:30 2026"
      },
      "committer": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Mon Feb 16 04:57:30 2026"
      },
      "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 04:52:32 2026"
      },
      "committer": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Mon Feb 16 04:52:32 2026"
      },
      "message": "fixup! Fix spurious rebuilds for phony targets with validations\n"
    },
    {
      "commit": "15c7373ba8b69e6159bdccf22ac15168504708e4",
      "tree": "eb9c31f1abb9a836f71ae4303ea25e0cc937cdb9",
      "parents": [
        "cc60300ab94dae9bb28fece3c9b7c397235b17de"
      ],
      "author": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Fri Feb 13 07:46:41 2026"
      },
      "committer": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Fri Feb 13 07:49:33 2026"
      },
      "message": "Fix spurious rebuilds for phony targets with validations\n\nPhony targets with no inputs are considered dirty if their output is missing.\nHowever, phony targets used as anchors for validation dependencies (e.g. from GN groups)\noften have no regular inputs but should not force a rebuild if the validations are clean.\n\nThis change updates RecomputeOutputDirty to check if a phony target has validation dependencies.\nIf so, it is treated similarly to a target with inputs: it is only dirty if its dependencies are dirty,\nnot automatically dirty because the output file is missing.\n\nThis fixes an issue where targets depending on a phony validation anchor would rebuild on every run.\n"
    },
    {
      "commit": "0d3b9f16b376b1e31c94e60180dacb1f336ebe31",
      "tree": "b8c377ce551a57b798c47b5a7842a9100983bf8b",
      "parents": [
        "cc60300ab94dae9bb28fece3c9b7c397235b17de"
      ],
      "author": {
        "name": "Elliot Goodrich",
        "email": "elliotgoodrich@gmail.com",
        "time": "Sat Feb 07 07:16:53 2026"
      },
      "committer": {
        "name": "Elliot Goodrich",
        "email": "elliotgoodrich@gmail.com",
        "time": "Thu Feb 12 20:19:50 2026"
      },
      "message": "Add `StringPiece::substr` method\n\nAdd `StringPiece::substr` with almost identical behavior as\n`std::string_view::substr`.   The only difference is what happens when\n`pos \u003e size()`, which is `StringPiece::substr` will call `Fatal` and\n`std::string_view::substr` will throw or terminate (depending on whether\nexceptions are enabled).\n\nIn ninja, where exceptions are disabled, these methods are basically\nidentical and it should be no harder to migrate `StringPiece` to\n`std::string_view` after this.\n\n`operator\u003d\u003d` was moved to be a free function so that we can write both\n\n```cpp\nStringPiece(\"abc\") \u003d\u003d \"abc\";\n\"abc\" \u003d\u003d StringPiece(\"abc\");\n```\n\nas currently we can\u0027t write the second line because we can\u0027t implicitly\nconvert `\"abc\"` to a `StringPiece`.\n\nThis changes is needed for future changes to reduce the number of\n`std::string` copies for performance reasons.\n"
    },
    {
      "commit": "cc60300ab94dae9bb28fece3c9b7c397235b17de",
      "tree": "1ae29a30522b075818286ec99915001eea662535",
      "parents": [
        "47c046750caff167787ffae562021cd58a54880a",
        "e4bff630fd339fcc6e8982a36cd88fc5d04c64a0"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Jan 20 16:10:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jan 20 16:10:35 2026"
      },
      "message": "Merge pull request #2705 from elliotgoodrich/reduce-sizeof-edge\n\nReduce `sizeof(Edge)`"
    },
    {
      "commit": "47c046750caff167787ffae562021cd58a54880a",
      "tree": "4f615b3952eb973c643d7e25f1a48e160f9a20d9",
      "parents": [
        "ad7ae6343cbf166023074470329fddf10fbf6e29",
        "9746811d26f6e17e14f98601f5c9927bbc45728a"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Tue Jan 20 08:12:59 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jan 20 08:12:59 2026"
      },
      "message": "Merge pull request #2660 from jyn514/doc\n\nDocument some additional `-t` tool flags"
    },
    {
      "commit": "ad7ae6343cbf166023074470329fddf10fbf6e29",
      "tree": "d77fc0757336c2abffed18b4bd719f6591f56fab",
      "parents": [
        "714ae4bf0dd79e81200c336128164f5a049be368",
        "92b82576af4036fe39216245b3cd9ffe5fd99871"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Jan 18 14:26:40 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jan 18 14:26:40 2026"
      },
      "message": "Merge pull request #2711 from jlonnberg/symlink-support-windows\n\nStat symlinks correctly on windows"
    },
    {
      "commit": "714ae4bf0dd79e81200c336128164f5a049be368",
      "tree": "b35700e32e8fac9dc666afadb6545ca758fe7dd7",
      "parents": [
        "83b15129cdfcd79a7fd71d445aae7cdf5bfc2a1a"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Jan 18 13:17:03 2026"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Jan 18 13:20:33 2026"
      },
      "message": "Compare vectors in build_test.cc to get better output if sizes don\u0027t match\n"
    },
    {
      "commit": "83b15129cdfcd79a7fd71d445aae7cdf5bfc2a1a",
      "tree": "ccb6f0e55c5b1a54dc884f4394775352574fed6d",
      "parents": [
        "27e545a5a1695be26ffe7144a903492e7a013d45",
        "0a7b5bea0f5c373154f336b821ad20e4396e0d3d"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Jan 18 12:59:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jan 18 12:59:05 2026"
      },
      "message": "Merge pull request #2704 from elliotgoodrich/reduce-node-sizeof\n\nReduce `sizeof(Node)`"
    },
    {
      "commit": "27e545a5a1695be26ffe7144a903492e7a013d45",
      "tree": "b793cc4345206c520f67db1f5b4fc91d3a0b503e",
      "parents": [
        "3cd2f23945ff8720b00c6c2a86411795beab6f87"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Thu Jan 15 20:46:37 2026"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Thu Jan 15 20:47:04 2026"
      },
      "message": "Don\u0027t clear err in VirtualFileSystem::Stat because real one also doesn\u0027t\n\nThis caused BuildWithLogTest.RebuildAfterFailure to fail because a previous error was still set.\n"
    },
    {
      "commit": "92b82576af4036fe39216245b3cd9ffe5fd99871",
      "tree": "de3d117eb5cb83bfe49026b2630faf6e8c178c4d",
      "parents": [
        "3cd2f23945ff8720b00c6c2a86411795beab6f87"
      ],
      "author": {
        "name": "Joakim Lonnberg",
        "email": "joakim.lonnberg@iar.com",
        "time": "Thu Jan 15 16:04:42 2026"
      },
      "committer": {
        "name": "Joakim Lonnberg",
        "email": "joakim.lonnberg@iar.com",
        "time": "Thu Jan 15 16:04:42 2026"
      },
      "message": "Stat symlinks correctly on windows\n"
    },
    {
      "commit": "3cd2f23945ff8720b00c6c2a86411795beab6f87",
      "tree": "7e96a8e9be3cc77d6a48e26cab5da79e214ff463",
      "parents": [
        "2d77de5e41b6d0beafd6955336297f3a6933dc96",
        "3eeda8fda65188bcea362e24b237f8eb113680f1"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Jan 14 00:16:20 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jan 14 00:16:20 2026"
      },
      "message": "Merge pull request #2673 from dblsaiko/push-mlnkxqoqmvru\n\nPrint an entry in the compilation database for each input file"
    },
    {
      "commit": "2d77de5e41b6d0beafd6955336297f3a6933dc96",
      "tree": "a2e4c8139d3fad8cecf05b8a1ec34a05d3032bdc",
      "parents": [
        "0311d436ae462c56cc98ef2cc63119a02cdd02c2",
        "a0e5f79ecc1207f28316c58fb5cd6d715b64cf97"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Jan 11 13:44:17 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jan 11 13:44:17 2026"
      },
      "message": "Merge pull request #2697 from jerome-pouiller/permission-fix\n\nMake sure to carry the old uid and gid on file replace"
    },
    {
      "commit": "0311d436ae462c56cc98ef2cc63119a02cdd02c2",
      "tree": "4aeaa31ba46460edf2e93f1fe8d82d0fd36957da",
      "parents": [
        "077c794f4636e64d6d62209de2463e5a8a29d8de",
        "3b944c9813d4ff1701125aef272e5a60eab82741"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Jan 11 13:41:36 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jan 11 13:41:36 2026"
      },
      "message": "Merge pull request #2606 from ildus/newline_insert\n\nSupport $^ escape sequence for newlines."
    },
    {
      "commit": "077c794f4636e64d6d62209de2463e5a8a29d8de",
      "tree": "9dd942da29f79fefd1f0df6529f380e7229ea8ea",
      "parents": [
        "c74beb43695ff8cae955f05a6cbe1753aa9517f8",
        "6fcd700456c4fa3ed12005116aaddb04717df2e2"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Jan 11 13:38:57 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jan 11 13:38:57 2026"
      },
      "message": "Merge pull request #2700 from ninja-build/dependabot/github_actions/actions/upload-artifact-6\n\nBump actions/upload-artifact from 5 to 6"
    },
    {
      "commit": "0a7b5bea0f5c373154f336b821ad20e4396e0d3d",
      "tree": "37e5f5900dbe027991879a2589be27709524ee7b",
      "parents": [
        "c74beb43695ff8cae955f05a6cbe1753aa9517f8"
      ],
      "author": {
        "name": "Elliot Goodrich",
        "email": "elliotgoodrich@gmail.com",
        "time": "Thu Jan 01 18:08:56 2026"
      },
      "committer": {
        "name": "Elliot Goodrich",
        "email": "elliotgoodrich@gmail.com",
        "time": "Thu Jan 01 18:28:58 2026"
      },
      "message": "Reduce `sizeof(Node)`\n\nReduce the size of `enum ExistenceStatus` from an `int` to `char`\nand then move an `int` to take up the 4 bytes of padding after the\n`bool` members.\n\nThis reduces `sizeof(Node)` from 144 to 136 on 64-bit (MSVC).\n"
    },
    {
      "commit": "e4bff630fd339fcc6e8982a36cd88fc5d04c64a0",
      "tree": "27258d74d9b9e546a68d1ffc6e9471d20d8a820d",
      "parents": [
        "c74beb43695ff8cae955f05a6cbe1753aa9517f8"
      ],
      "author": {
        "name": "Elliot Goodrich",
        "email": "elliotgoodrich@gmail.com",
        "time": "Thu Jan 01 18:22:55 2026"
      },
      "committer": {
        "name": "Elliot Goodrich",
        "email": "elliotgoodrich@gmail.com",
        "time": "Thu Jan 01 18:27:17 2026"
      },
      "message": "Reduce `sizeof(Edge)`\n\nReduce the size of `enum VisitMark` from an `int` to `char` and then\nmove this and the `Jobserver::Slot` (a `std::int16_t`) next to the\n`bool` members to fill up padding.\n\nThis reduces `sizeof(Edge)` from 196 to 184 on 64-bit (MSVC).\n"
    },
    {
      "commit": "3b944c9813d4ff1701125aef272e5a60eab82741",
      "tree": "0245ed4fe7c15bb1a910c3c1b86ed3982bec9ebe",
      "parents": [
        "85c1564114c91e5330742b5324f5886043d887f6"
      ],
      "author": {
        "name": "Ildus Kurbangaliev",
        "email": "i.kurbangaliev@gmail.com",
        "time": "Sun Dec 28 11:10:25 2025"
      },
      "committer": {
        "name": "Ildus Kurbangaliev",
        "email": "i.kurbangaliev@gmail.com",
        "time": "Sun Dec 28 11:10:25 2025"
      },
      "message": "Rename minNewline.. constants to kMinNewline..\n"
    }
  ],
  "next": "85c1564114c91e5330742b5324f5886043d887f6"
}
