)]}'
{
  "log": [
    {
      "commit": "58927d057398852591f033f8e0faae10e97d15e4",
      "tree": "327c3f30b05bf4863208cecd33ea97d3d0a645a2",
      "parents": [
        "e708a791922169adb3ce437e861edbe8ab0d42d3"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Sep 06 14:09:06 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 06 14:09:06 2026 +0200"
      },
      "message": "Remove trailing whitespace"
    },
    {
      "commit": "e708a791922169adb3ce437e861edbe8ab0d42d3",
      "tree": "8390da884981acb3f5d7270d94b80bf1b4934490",
      "parents": [
        "b9b400b5b9ac06338eb3ce720098217d11ee0650",
        "ff105f1a98d61f53bf3ef513ae2ecb71a62ed627"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Sep 06 13:57:51 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 06 13:57:51 2026 +0200"
      },
      "message": "Merge pull request #2826 from victoriacampbellmake/fix/windows-unc-canonicalize-2800\n\nfix(windows): preserve UNC prefix after CanonicalizePath (#2800)"
    },
    {
      "commit": "b9b400b5b9ac06338eb3ce720098217d11ee0650",
      "tree": "bdf380f368d70027e247277c4271505bd4d02efa",
      "parents": [
        "f5a3026eafdfd86f87acd2246893d4aa14721a77",
        "d21c6aa114d2d3ee5515ec537a6333e46b274d5a"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Sep 06 13:50:49 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 06 13:50:49 2026 +0200"
      },
      "message": "Merge pull request #2686 from PowellNGL/master\n\nInclude estimated build time of subtree in the edge weight heuristic"
    },
    {
      "commit": "f5a3026eafdfd86f87acd2246893d4aa14721a77",
      "tree": "4717cfdda5eaeb3c5660b8bc6d3842c7829ef527",
      "parents": [
        "de0898246f26c89d541de68bec578cb4515c5732",
        "57f2504e8133fa7044e00c0c296a5a34768684f1"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sun Sep 06 13:47:13 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Sep 06 13:47:13 2026 +0200"
      },
      "message": "Merge pull request #2786 from JamesWidman/write-one-byte-to-lockfile\n\nUpdate lockfile mtime by writing a byte to it"
    },
    {
      "commit": "de0898246f26c89d541de68bec578cb4515c5732",
      "tree": "97765f8280c03a7a60fd6419099041a7b54c46a9",
      "parents": [
        "e1884869b891038becd45a0e09ba66cb73cf7107",
        "a9071772ead9522d7ebb21048da08c8ea22cec21"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Thu Sep 03 17:28:10 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 17:28:10 2026 +0200"
      },
      "message": "Merge pull request #2634 from digit-google/jobserver-pool\n\nImplement jobserver pool mode in Ninja with new `--jobserver-pool` flag."
    },
    {
      "commit": "e1884869b891038becd45a0e09ba66cb73cf7107",
      "tree": "5f8b076dbe1dba4b25ad53d5411a87d7a47930a6",
      "parents": [
        "bfb4e71bc1fc691d195f06058db6bbd2779cd556",
        "4e794fe43c6734aa8bce9f1a80bcb8620fc6ca0c"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Thu Sep 03 17:27:17 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 17:27:17 2026 +0200"
      },
      "message": "Merge pull request #2781 from Omotola/fix/msvc-warnings-c4244-c4267\n\nEnable MSVC warnings C4244 and C4267 (#2769)"
    },
    {
      "commit": "bfb4e71bc1fc691d195f06058db6bbd2779cd556",
      "tree": "b6b78ad8a2d941b22edb9d1b5f0ed87f3b54695f",
      "parents": [
        "b51a1e37c2fb89bbefa600bd155e1ce13983f09d",
        "d6cba0f0912f357d2f7800a63ff1cd6dca12e912"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Thu Sep 03 17:26:30 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Sep 03 17:26:30 2026 +0200"
      },
      "message": "Merge pull request #2655 from magistau/zero-deps\n\nfeat: `zero` deps format"
    },
    {
      "commit": "4e794fe43c6734aa8bce9f1a80bcb8620fc6ca0c",
      "tree": "be53c033da4e0d5f3bc9982457b4b454f2cc380b",
      "parents": [
        "b51a1e37c2fb89bbefa600bd155e1ce13983f09d"
      ],
      "author": {
        "name": "Omotola Akeredolu",
        "email": "oakeredolu@microsoft.com",
        "time": "Mon May 25 18:17:54 2026 -0700"
      },
      "committer": {
        "name": "Omotola Akeredolu",
        "email": "oakeredolu@microsoft.com",
        "time": "Tue Aug 25 12:54:34 2026 -0700"
      },
      "message": "Enable MSVC warnings C4244 and C4267 (#2769)\n\nRemove the /wd4244 and /wd4267 suppressions from the MSVC build\nconfiguration and fix the resulting integer-conversion warnings\nthroughout the codebase.\n\nCo-authored-by: Copilot \u003c223556219+Copilot@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "a9071772ead9522d7ebb21048da08c8ea22cec21",
      "tree": "7cfbd213fb10cff9c18a753ce438e61d2439e934",
      "parents": [
        "7424d27c25d53614e5b48c12a689d2c440e45019"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit+github@google.com",
        "time": "Tue Jul 01 18:36:05 2025 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit+github@google.com",
        "time": "Mon Aug 24 17:58:56 2026 +0200"
      },
      "message": "Support `enable_jobserver_pool \u003d 1` in `build.ninja`.\n\nAnother way to enable jobserver pool mode is to set\n`enable_jobserver_pool \u003d 1` in the `build.ninja` file directly,\nwhich can be determined by the generator directly.\n\nThis is equivalent to using `--jobserver-pool` on the command-line.\nNote that:\n\n- Any value other than 1 is ignored, intentionally (the size of\n  the pool is determined when Ninja is invoked only).\n\n- There is no way to disable the feature from the command-line\n  when enabled in the build plan.\n\n- Just like `--jobserver-pool`, this is ignored if a parent\n  jobserver pool is detected when Ninja is invoked.\n"
    },
    {
      "commit": "7424d27c25d53614e5b48c12a689d2c440e45019",
      "tree": "7a99a1d655ac3827eca33b08acd9efe21805fe23",
      "parents": [
        "41ed4aaabe53955980e44de130231ea697d93555"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit+github@google.com",
        "time": "Mon Jun 16 14:44:56 2025 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit+github@google.com",
        "time": "Mon Aug 24 17:55:36 2026 +0200"
      },
      "message": "Implement GNU jobserver pool mode.\n\nMake Ninja provide a pool of GNU Make jobserver slots when\ninvoked with the `--jobserver-pool` command-line option.\n\n- Introduce JobserverState class to manage the state of\n  the jobserver pool and client instances for a given\n  Ninja build.\n\n  In particular, the methods ShouldSetupClient() and\n  ShouldSetupPool() clarify under which conditions\n  the pool or client should be created, and provide\n  explanations for the decision.\n\n- All jobserver-related info / warnings are moved to the\n  VERBOSE level, keeping the output of normal invocations\n  small, and prevents modifying the unit-tests accordingly.\n\n- Update manual accordingly, detailing how everything works.\n"
    },
    {
      "commit": "41ed4aaabe53955980e44de130231ea697d93555",
      "tree": "6839ea8ba9b653c84c27bf095cf0d30919f33b45",
      "parents": [
        "b51a1e37c2fb89bbefa600bd155e1ce13983f09d"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit+github@google.com",
        "time": "Mon Jun 16 14:14:31 2025 +0200"
      },
      "committer": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit+github@google.com",
        "time": "Mon Aug 24 17:42:32 2026 +0200"
      },
      "message": "Add JobserverPool class.\n\nA new class implementing a GNU Jobserver pool of job slots.\nThis only supports FIFO mode on Posix, to match the implementation\nof the client Jobserver class that uses the pool.\n"
    },
    {
      "commit": "57f2504e8133fa7044e00c0c296a5a34768684f1",
      "tree": "1bdc5c949f5222c8153dfc99f216e0d2f3ac0ceb",
      "parents": [
        "fc6bb98eee5a9710055cb9fe74375a6523831e28"
      ],
      "author": {
        "name": "James Widman",
        "email": "james.widman@gmail.com",
        "time": "Thu Jul 23 15:27:17 2026 -0700"
      },
      "committer": {
        "name": "James Widman",
        "email": "james.widman@gmail.com",
        "time": "Sat Aug 15 20:41:51 2026 -0700"
      },
      "message": "Update lockfile mtime by writing a byte to it\n\nOn a tmpfs on macOS 26.5 (25F71), the use of\n\n  DiskInterface::WriteFile(\".ninja_lock\", \"\", false)\n\n...has no effect in all evaluations after the first, and this is because\nof a bug in Darwin\u0027s implementation of fopen(). In particular, in the\nevent where a file foo already exists, and is stored on a tmpfs\nfilesystem, the call fopen(\"foo\", \"wb\") fails to update the mtime of the\nfile foo. (According to POSIX, this call to fopen() should update the\nmtime.)\n\nIn this change, we work around that bug by writing a single byte to the\nlock file.\n\nFixes: #2784\n"
    },
    {
      "commit": "ff105f1a98d61f53bf3ef513ae2ecb71a62ed627",
      "tree": "59cc8e4082c7f9925c4f857ff6588d154949c475",
      "parents": [
        "cffad24291a70c0aa44444bb1e8c687273cbf08c"
      ],
      "author": {
        "name": "victoriacampbellmake",
        "email": "victoriacampbellmake@users.noreply.github.com",
        "time": "Sat Aug 15 16:48:45 2026 +0800"
      },
      "committer": {
        "name": "victoriacampbellmake",
        "email": "victoriacampbellmake@users.noreply.github.com",
        "time": "Sat Aug 15 16:48:45 2026 +0800"
      },
      "message": "fix(windows): only restore UNC prefix when original separators were backslashes\n\nSigned-off-by: victoriacampbellmake \u003cvictoriacampbellmake@users.noreply.github.com\u003e"
    },
    {
      "commit": "cffad24291a70c0aa44444bb1e8c687273cbf08c",
      "tree": "732531fc51cd9ed7ab6a467a4e5b05eefa42bc2f",
      "parents": [
        "da6742eae17fd718c3a5486d329ea9623bebf0a7"
      ],
      "author": {
        "name": "victoriacampbellmake",
        "email": "victoriacampbellmake@users.noreply.github.com",
        "time": "Sat Aug 15 16:47:45 2026 +0800"
      },
      "committer": {
        "name": "victoriacampbellmake",
        "email": "victoriacampbellmake@users.noreply.github.com",
        "time": "Sat Aug 15 16:47:45 2026 +0800"
      },
      "message": "fix(windows): preserve UNC prefix after CanonicalizePath (#2800)\n\nSigned-off-by: victoriacampbellmake \u003cvictoriacampbellmake@users.noreply.github.com\u003e"
    },
    {
      "commit": "da6742eae17fd718c3a5486d329ea9623bebf0a7",
      "tree": "7b1013fc98df41491d8a592cb38d8f3732b51774",
      "parents": [
        "b51a1e37c2fb89bbefa600bd155e1ce13983f09d"
      ],
      "author": {
        "name": "victoriacampbellmake",
        "email": "victoriacampbellmake@users.noreply.github.com",
        "time": "Sat Aug 15 16:47:41 2026 +0800"
      },
      "committer": {
        "name": "victoriacampbellmake",
        "email": "victoriacampbellmake@users.noreply.github.com",
        "time": "Sat Aug 15 16:47:41 2026 +0800"
      },
      "message": "fix(windows): preserve UNC prefix after CanonicalizePath (#2800)\n\nSigned-off-by: victoriacampbellmake \u003cvictoriacampbellmake@users.noreply.github.com\u003e"
    },
    {
      "commit": "d6cba0f0912f357d2f7800a63ff1cd6dca12e912",
      "tree": "9a9f4bf3b80c282c12cb7098316c4a9dce949909",
      "parents": [
        "77d328f5f679bfef14b1f67f3cd431b729bc786f"
      ],
      "author": {
        "name": "Tau",
        "email": "git@alice-carroll.pet",
        "time": "Tue Aug 19 03:26:51 2025 +0300"
      },
      "committer": {
        "name": "Tau",
        "email": "git@alice-carroll.pet",
        "time": "Tue Aug 11 13:25:40 2026 +0300"
      },
      "message": "feat: `zero` deps format\n"
    },
    {
      "commit": "b51a1e37c2fb89bbefa600bd155e1ce13983f09d",
      "tree": "5a2bb3b81495ac79189d098f8881175d0a520117",
      "parents": [
        "fc6bb98eee5a9710055cb9fe74375a6523831e28",
        "7255bed7a11f6821ea09843f958816a868b02036"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Sat Jul 25 22:55:58 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 25 22:55:58 2026 +0200"
      },
      "message": "Merge pull request #2817 from moritzx22/fixUnitTest_DyndepBuildDiscoverOutputAndDepfileInput\n\nUnittest DyndepBuildDiscoverOutputAndDepfileInput"
    },
    {
      "commit": "7255bed7a11f6821ea09843f958816a868b02036",
      "tree": "5a2bb3b81495ac79189d098f8881175d0a520117",
      "parents": [
        "fc6bb98eee5a9710055cb9fe74375a6523831e28"
      ],
      "author": {
        "name": "moritzx22",
        "email": "moritz.mh22@gmail.com",
        "time": "Sat Jul 25 21:09:47 2026 +0200"
      },
      "committer": {
        "name": "moritzx22",
        "email": "moritz.mh22@gmail.com",
        "time": "Sat Jul 25 21:16:28 2026 +0200"
      },
      "message": "Unittest DyndepBuildDiscoverOutputAndDepfileInput\n\nPR #2680 modified the loading of depfiles and requires a\nfix to the unittest.\n"
    },
    {
      "commit": "fc6bb98eee5a9710055cb9fe74375a6523831e28",
      "tree": "5f29b216f4b719ba43130cac047d6762e8380ac8",
      "parents": [
        "88f90e87fd61a95bc1e6c463d6d3eb19b3e80f68"
      ],
      "author": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Jul 22 21:56:26 2026 +0200"
      },
      "committer": {
        "name": "Jan Niklas Hasse",
        "email": "jhasse@bixense.com",
        "time": "Wed Jul 22 21:56:26 2026 +0200"
      },
      "message": "Use 2 spaces for indent in CMakeLists.txt, too\n"
    },
    {
      "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"
    }
  ],
  "next": "8e0d1fff22a3ecd9844607e057a068b5a2c9b7bd"
}
