)]}'
{
  "log": [
    {
      "commit": "dcc5e98fbd103caf0b1168207895877deb45742f",
      "tree": "e8a0fa9de88937df6a23aa94935122a88982ba35",
      "parents": [
        "85355fa38ba93315d38bab278a9201ef9840b3a8"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Fri Apr 24 01:15:08 2026 -0700"
      },
      "committer": {
        "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Apr 24 01:31:33 2026 -0700"
      },
      "message": "Revert \"Run formatter and update reference in CI\"\n\nThis reverts commit bed604c5285d12bb3f986b8b2395396042d0980d.\n\nReason for revert: This doesn\u0027t work in CQ.\nhttps://ci.chromium.org/ui/p/gn/builders/try/linux/b8683656153016286785/overview\n\n```\n/b/s/w/ir/x/w/gn/tools/update_reference.sh: line 12: ninja: command not found\n```\n\nOriginal change\u0027s description:\n\u003e Run formatter and update reference in CI\n\u003e\n\u003e Change-Id: I6ca5a45dd11f7e6185912aad9b52f5b26a6a6964\n\u003e Reviewed-on: https://gn-review.googlesource.com/c/gn/+/22062\n\u003e Reviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n\u003e Commit-Queue: Matt Stark \u003cmsta@google.com\u003e\n\nTBR\u003dtikuta@google.com,gn-scoped@luci-project-accounts.iam.gserviceaccount.com,msta@google.com\n\nNo-Presubmit: true\nNo-Tree-Checks: true\nNo-Try: true\nChange-Id: I8d961255d120ab00541b5d22d112e7cb6d4abfd4\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/22180\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "85355fa38ba93315d38bab278a9201ef9840b3a8",
      "tree": "c40d991f8e4daf244bcb091eef7cd89a5234e7b9",
      "parents": [
        "bed604c5285d12bb3f986b8b2395396042d0980d"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Thu Apr 23 21:12:16 2026 -0700"
      },
      "committer": {
        "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Apr 23 21:31:51 2026 -0700"
      },
      "message": "Revert \"Fix: Ensure only actual object files are included in link inputs\"\n\nThis reverts commit c45cf3a6dbcc97b74fd27f837af6fd89160fac77.\n\nReason for revert:\n\nThis may break windows build.\nhttps://ci.chromium.org/ui/p/chromium/builders/try/win-rel/1459583/overview\n\nOriginal change\u0027s description:\n\u003e Fix: Ensure only actual object files are included in link inputs\n\u003e\n\u003e c_additional_outputs feature introduced additional outputs (e.g., .dwo\n\u003e files) that inadvertently became part of the link inputs. This was\n\u003e unintended, as typically only true object files should serve as link\n\u003e inputs.\n\u003e\n\u003e Bug: 502431091\n\u003e Change-Id: Ie51f40f4cc222b15b7ef93a4b67634a977e71d6b\n\u003e Reviewed-on: https://gn-review.googlesource.com/c/gn/+/22080\n\u003e Reviewed-by: Andrew Grieve \u003cagrieve@google.com\u003e\n\u003e Commit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n\nBug: 502431091\nChange-Id: Ic9434a83cb7617e764fb350b2e42d506fba49084\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/22120\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "bed604c5285d12bb3f986b8b2395396042d0980d",
      "tree": "7da55cefd34c38f16ef4021f1c6dec8160367ff7",
      "parents": [
        "e7f69865dda3550824fcc20d14dd94f49667bfbe"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Thu Apr 23 14:49:09 2026 +1000"
      },
      "committer": {
        "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Apr 23 21:08:06 2026 -0700"
      },
      "message": "Run formatter and update reference in CI\n\nChange-Id: I6ca5a45dd11f7e6185912aad9b52f5b26a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/22062\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "e7f69865dda3550824fcc20d14dd94f49667bfbe",
      "tree": "a2e920b76689a2fedfd21937d600c6006ac91961",
      "parents": [
        "c45cf3a6dbcc97b74fd27f837af6fd89160fac77"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Thu Apr 23 14:49:09 2026 +1000"
      },
      "committer": {
        "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Apr 23 19:09:19 2026 -0700"
      },
      "message": "Add --diff to run_formatter and update_reference\n\nWhen --diff is provided, they output nonzero statuses when changes are\nrequired. This makes them suitable to run in CI\n\nChange-Id: Iceda9895beae955e13059e74739810126a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/22060\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "c45cf3a6dbcc97b74fd27f837af6fd89160fac77",
      "tree": "656646353287a47d97943ed3c66167ae10af7744",
      "parents": [
        "e2f38fa47b6a6e58e1d427e9d2af246a19cb980c"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Thu Apr 23 18:02:22 2026 +0900"
      },
      "committer": {
        "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Apr 23 18:32:25 2026 -0700"
      },
      "message": "Fix: Ensure only actual object files are included in link inputs\n\nc_additional_outputs feature introduced additional outputs (e.g., .dwo\nfiles) that inadvertently became part of the link inputs. This was\nunintended, as typically only true object files should serve as link\ninputs.\n\nBug: 502431091\nChange-Id: Ie51f40f4cc222b15b7ef93a4b67634a977e71d6b\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/22080\nReviewed-by: Andrew Grieve \u003cagrieve@google.com\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "e2f38fa47b6a6e58e1d427e9d2af246a19cb980c",
      "tree": "bc2012bfb702bd0cdf6cf96c4aee459c268dd59a",
      "parents": [
        "afcf992bb8805ba7e7157230bb929ee9416bf5d3"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Thu Apr 23 15:34:36 2026 +1000"
      },
      "committer": {
        "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Apr 22 22:51:01 2026 -0700"
      },
      "message": "Run `infra/recipes.py test train`.\n\nThe golden data is out of date.\n\nChange-Id: Ia6800ef10f1811a76742b2f9cbdbb4f26a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/22061\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "afcf992bb8805ba7e7157230bb929ee9416bf5d3",
      "tree": "6654130a6fcd7aed03265e87d8e61525a1931577",
      "parents": [
        "c78469087cd38cac1e89075c46917485ba509062"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Thu Apr 23 10:14:46 2026 +1000"
      },
      "committer": {
        "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Apr 22 22:21:23 2026 -0700"
      },
      "message": "Improve EXPECT_EQ diff printing\n\nIt now supports printing diffs for non-string formats via the function `Pretty`.\nYou can implement it for a custom type to easily allow comparisons. For\nexample, you can compare a commonly used type such as std::vector\u003cconst Target*\u003e.\n\n*** FAILURE ../src/gn/command_suggest_unittest.cc:57: all_targets \u003d\u003d no_targets\ndiff --git a/tmp/.org.chromium.Chromium.rb8DZb/expected.txt b/tmp/.org.chromium.Chromium.rb8DZb/actual.txt\nindex 257b0ee5a..0d4f101c7 100644\n--- a/tmp/.org.chromium.Chromium.rb8DZb/expected.txt\n+++ b/tmp/.org.chromium.Chromium.rb8DZb/actual.txt\n@@ -1,3 +1,2 @@\n [\n-  0x7ffe03304ea8 -\u003e Target for //foo:bar(),\n ]\n\nChange-Id: I226de16e65407a8c460d023ce466c0b36a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/22020\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "c78469087cd38cac1e89075c46917485ba509062",
      "tree": "4ef8dd1dfcc1d4f74485d4e9a1b9c69c54bee56e",
      "parents": [
        "9641c502e7b394754033dc2ad873a4b3f3a68a6c"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Thu Apr 23 13:40:48 2026 +1000"
      },
      "committer": {
        "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Apr 22 21:46:00 2026 -0700"
      },
      "message": "Simplify success expectations in GN.\n\nIt is extremely common to do `EXPECT_FALSE(err.has_error())` to check\nfor success, but users rarely log the error that actually occurred.\n\nThis introduces EXPECT_SUCCESS|ASSERT_SUCCESS(err), which automatically\nlogs the error message if an error occurred.\n\nChange-Id: Id987943fc10274f537d90a1314a97f6c6a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/22040\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "9641c502e7b394754033dc2ad873a4b3f3a68a6c",
      "tree": "a79caee0722148a1e3813a0f865f5c2d0b06dad2",
      "parents": [
        "a7ad13b5c256da91a9b396cefa3fe16380d1d67f"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Wed Apr 22 00:11:41 2026 +0900"
      },
      "committer": {
        "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Apr 21 19:20:32 2026 -0700"
      },
      "message": "Add support for c_additional_outputs in config\n\nThis feature is needed to support Debug Fission (.dwo files) in\nChromium. Currently, referencing declare_args variables in a toolchain\ndefinition evaluates them in the context of the default toolchain,\ncausing mismatches for secondary toolchains. Also, we need to control\noutputs based on target configs (e.g., whether -gsplit-dwarf is used or\nnot) rather than applying them globally to all targets in a toolchain.\n\nThis CL allows defining `c_additional_outputs` in a `config` block. When\napplied to a target, these outputs are expanded and added to the Ninja\nbuild edge\u0027s outputs for each source file compilation.\n\nBug: 502431091\nChange-Id: I914b4ab220d68d3f9bd8eacd2fe4655138fb636c\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21980\nReviewed-by: Matt Stark \u003cmsta@google.com\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@google.com\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "a7ad13b5c256da91a9b396cefa3fe16380d1d67f",
      "tree": "9a0e5cb7e8523e5f5884c16ecbc1a07a947f1518",
      "parents": [
        "7f7c0c9a3b63b6b052714bbd1848b1b0723f6389"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Tue Apr 21 14:21:53 2026 +1000"
      },
      "committer": {
        "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Apr 21 16:50:46 2026 -0700"
      },
      "message": "Add diffs to EXPECT_EQ.\n\nPreviously, the user would have to manually write:\nEXPECT_EQ(a, b) \u003c\u003c \"Want:\\n\" \u003c\u003c b \u003c\u003c \"\\nGot:\\n\" \u003c\u003c a;\n\nThe vast majority of the time this got shortened to on of:\n// Where does one end and the other begin? Which one is which?\n// How do you detect a single-word or single-character diff?\nEXPECT_EQ(a, b) \u003c\u003c b \u003c\u003c \"\\n\" \u003c\u003c a;\n// It just prints \"failure\" and nothing else.\nEXPECT_EQ(a, b);\n\nWhich made it almost impossible to understand error mesasges GN output\nfor both humans and AI.\n\nThis change uses git to pretty-print a diff for test failures (with\ncolor!), falling back to a simple Want:\\n...\\nGot:\\n... format\n\nChange-Id: Icc77e607fcba1bce1e76b60ffb4746a56a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21960\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "7f7c0c9a3b63b6b052714bbd1848b1b0723f6389",
      "tree": "3336ab937d4e836a3df12dcda154dfad5a1b31b3",
      "parents": [
        "9f7020ce960b27ac2aa19d9dd48304b1210fc705"
      ],
      "author": {
        "name": "BogDan Vatra",
        "email": "bogdan@kde.org",
        "time": "Wed Apr 15 15:43:33 2026 +0300"
      },
      "committer": {
        "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Apr 17 02:21:03 2026 -0700"
      },
      "message": "Advertise QtCreator v20+ built-in GN support\n\nChange-Id: I60fd837d418c079e8dc8df13ce8049eb4d9ec6ab\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21900\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nCommit-Queue: David Turner \u003cdigit@google.com\u003e\n"
    },
    {
      "commit": "9f7020ce960b27ac2aa19d9dd48304b1210fc705",
      "tree": "83ef86754f56c9a5a9035d89bdac11f6c0aefb8d",
      "parents": [
        "c89f25a9d90f6c95de75ad32168aa059e7593e42"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Mon Apr 13 13:34:23 2026 +1000"
      },
      "committer": {
        "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Apr 17 01:33:58 2026 -0700"
      },
      "message": "Rename impl:$MODULE to $MODULE_Private.\n\nThe latter is specifically hardcoded to be treated as a private module\nby clang.\n\nChange-Id: I6990356d8d318f42b6a266eb088273496a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21941\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "c89f25a9d90f6c95de75ad32168aa059e7593e42",
      "tree": "4afea3995b2625d3bcb9b44e8227ce12b82414d2",
      "parents": [
        "42ace47bb426ca9705175d866bb9bdf168d5535f"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Thu Apr 09 14:00:06 2026 +1000"
      },
      "committer": {
        "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Apr 17 01:20:43 2026 -0700"
      },
      "message": "Only output -fmodule-map-file for the root generated modulemap.\n\nGenerated modulemaps declare their dependencies inside the file.\nThus, -fmodule-map-file is not required on the transitive dependencies.\n\nChange-Id: I7d559d4505c8bfe9c22da350be32246c6a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21940\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "42ace47bb426ca9705175d866bb9bdf168d5535f",
      "tree": "362e17c7f745d4ba477238de375487ce9e513fd3",
      "parents": [
        "ab5eb1783d8d5c1a40e56393b1b52c4b25692cf1"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Mon Apr 13 11:10:13 2026 +1000"
      },
      "committer": {
        "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Apr 17 00:46:55 2026 -0700"
      },
      "message": "Add function `expand_directory` to gn.\n\nThis function expands a directory to a list of files.\nThis will allow us to do a variety of things, such as:\n* Removing our `generate_libcxx_headers` script\n* Ensuring that our whole sysroot is in the inputs to a rule.\n\nThis is required because the contents of a sysroot are not able to be\nstored in the chrome source code because chromeos sysroots can be paths\npointing to the chromeos checkout rather than the chrome checkout.\n\nIt also allows us to significantly improve the quality of our third\nparty libraries, for which we would, after this change, no longer have\nto keep the source file list in sync, but instead simply use those third\nparty libraries as the source of truth.\n\nBug: b:491242305\nChange-Id: Ib52107b2f877021d3e59c54c9a554fac6a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21860\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "ab5eb1783d8d5c1a40e56393b1b52c4b25692cf1",
      "tree": "cd18a007de764e0e14e29234fb42451af1ce82c5",
      "parents": [
        "ec56d4d935a0e2ab9d52b88dd00c93ec51233055"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Thu Apr 09 14:00:06 2026 +1000"
      },
      "committer": {
        "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Apr 16 21:55:12 2026 -0700"
      },
      "message": "Refactor ModuleType from an enum to a bitset.\n\nThis will significantly reduce the tech debt and reduce the difficulty\nin adding support for autogenerated nontextual modules.\n\nThis also removes unneccesary modulemap, as it no longer serves a\npurpose now that we have double modulemaps.\n\nBug: b:500845363\nChange-Id: I192a62ccbdc7937328b84de6af5e9f186a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21840\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "ec56d4d935a0e2ab9d52b88dd00c93ec51233055",
      "tree": "ce7251b56a3a5515128389b06a1b3310441c9ffc",
      "parents": [
        "95b80cf45eb71a8076aeeecfb543c097a33a9896"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Thu Apr 09 14:00:06 2026 +1000"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Apr 09 23:15:32 2026 -0700"
      },
      "message": "Generate two modulemaps per target.\n\nThis is required for layering check, otherwise we would not be able to:\n* Verify that public headers don\u0027t rely on anything in nonpublic deps.\n* Verify that non-public headers are not accessed\n\nThe public modulemap:\n* Includes public headers\n* Declares that it uses public_deps\n\nThe private modulemap:\n* Inculdes private headers\n* Declares that it uses deps + public_deps + public module\n\nBug: b:500845363\nChange-Id: I5909c81a024d3928f38176383ee884966a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21802\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "95b80cf45eb71a8076aeeecfb543c097a33a9896",
      "tree": "58a7016f4d6e7e4277b140b0d14e09a4121c5d26",
      "parents": [
        "608d3ea7d0456dcb064cc348b03311b99e7480e2"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Thu Apr 09 14:00:06 2026 +1000"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Apr 09 22:18:42 2026 -0700"
      },
      "message": "Put dependencies in modulemaps\n\nThis consists of two parts:\n* The `use` declaration specifies that it is allowed to access (ie. has\n  a dependency on) another module\n* The `extern module` declaration ensures that `-fmodule-map-file` is\n  only required for the root modulemap file.\n\nBug: b:500845363\nChange-Id: Id75e0a93ffbd0ef89bc69000afb5a6276a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21801\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "608d3ea7d0456dcb064cc348b03311b99e7480e2",
      "tree": "a32cac9c7470ffb08a8ad7630c1277cca2995ff1",
      "parents": [
        "067bb9e2040d28f2d46cc23e4896d287544b0ecf"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Fri Apr 10 13:16:33 2026 +1000"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Apr 09 21:16:20 2026 -0700"
      },
      "message": "Run formatter\n\nCIPD had an outage today, which broke the formatter, so some changes\nwere not formatted before uploading.\n\nChange-Id: I1f4fe985c8e921446e5c4486505c4d5d6a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21804\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "067bb9e2040d28f2d46cc23e4896d287544b0ecf",
      "tree": "1d8b68705efd517c7f94e22e17e52ef0df6aa41a",
      "parents": [
        "f9116e30e34ac9d33f420ca9917ec362221caded"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Thu Apr 09 14:00:06 2026 +1000"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Apr 09 21:16:14 2026 -0700"
      },
      "message": "Include your own modulemap files in module_deps_no_self.\n\nThe reason for the existence of module_deps_no_self is to ensure you\ndon\u0027t depend upon the PCM that you\u0027re generating at this very moment.\nBut the same issue doesn\u0027t apply to the modulemap file, and it is\nneccesary for the layering check.\n\nBug: b:500845363\nChange-Id: I90b97445e96bea008587d6dd907679dc6a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21800\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "f9116e30e34ac9d33f420ca9917ec362221caded",
      "tree": "91cb4fde899026e171fe2102a7d9b03ff43cfff6",
      "parents": [
        "6e8dcdebbadf4f8aa75e6a4b6e0bdf89dce1513a"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Thu Mar 12 14:03:13 2026 +1100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Apr 09 20:27:35 2026 -0700"
      },
      "message": "Change default module name in GN to be the full label.\n\nThis guaruntees uniqueness of module names, preventing clashes.\n\nBug: b:500845363\nChange-Id: I62dba8b8754ab5f1b89410566177d4fe6a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21680\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "6e8dcdebbadf4f8aa75e6a4b6e0bdf89dce1513a",
      "tree": "6962e1f7647ca62271862368e94f2e978a2d5a64",
      "parents": [
        "400e5d380ff92a4a33c1bf43591980eba370af42"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Thu Mar 12 08:11:55 2026 +1100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Mar 31 19:56:53 2026 -0700"
      },
      "message": "Add modulemap generation to GN.\n\nThis is the first step in adding a layering check to GN.\nIt generates modulemap files, and adds -fmodule-map-file to the\ncommand-line.\nThis is guarded behind a flag, so there should be no change to the\nchange in behaviour of GN\n\nBug: b:491925153\nChange-Id: Iaadf759240de829349796c43f4deda9a6a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21521\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "400e5d380ff92a4a33c1bf43591980eba370af42",
      "tree": "b7985d8a98f04900aa36c789bde96e2404d3018d",
      "parents": [
        "b2ac0e7a9089039e62b84d246eca83f84c540f76"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Thu Mar 26 12:57:49 2026 +1100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Mar 31 18:20:20 2026 -0700"
      },
      "message": "Support building gn without a .git directory.\n\nThis is relevant both for jj non-colocated repos, and for performant mutagen-based syncing, which allows for you to sync the code without syncing the .git directory.\n\nChange-Id: I6e4b5edcc260077c73a3447b19f8d1a46a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21760\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "b2ac0e7a9089039e62b84d246eca83f84c540f76",
      "tree": "babd158db382b570a612672406fe87779066c577",
      "parents": [
        "c91f7e86727683118b6096757717135463fdcdd7"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Tue Mar 24 17:01:53 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Mar 24 04:08:33 2026 -0700"
      },
      "message": "Limit the maximum number of GN worker threads to 32.\n\nOn machines with high core counts (e.g., 128 cores), using all available\nCPUs for worker threads significantly slows down `gn gen` due to thread\nscheduling overhead and contention.\n\nThis change caps the default number of worker threads at 32 while\nmaintaining the existing minimum of 8.\n\nProfiling results of `gn gen` for Chrome using hyperfine on a 128-core\nLinux machine:\n\nSummary\n  ./buildtools/linux64/gn gen out/Default/ --threads\u003d32 ran\n    1.01 ± 0.03 times faster than ./buildtools/linux64/gn gen out/Default/ --threads\u003d16\n    1.07 ± 0.03 times faster than ./buildtools/linux64/gn gen out/Default/ --threads\u003d48\n    1.13 ± 0.03 times faster than ./buildtools/linux64/gn gen out/Default/ --threads\u003d64\n    1.26 ± 0.03 times faster than ./buildtools/linux64/gn gen out/Default/ --threads\u003d96\n    1.28 ± 0.04 times faster than ./buildtools/linux64/gn gen out/Default/ --threads\u003d8\n\nThis improved gn gen for android too.\n\nSummary\n  ./buildtools/linux64/gn --threads\u003d32 gen out/android ran\n    1.19 ± 0.04 times faster than ./buildtools/linux64/gn gen out/android\n\nBug: 484863025\nChange-Id: I44b467c1813a32015666926d8bbaaad4206b5447\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21740\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "c91f7e86727683118b6096757717135463fdcdd7",
      "tree": "cadff450fe5e0c3769df302a93379fc5a7bc2ba3",
      "parents": [
        "755ea88213fc46818ede21a28fc2c191e2a24bcb"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Fri Mar 20 16:20:27 2026 +0000"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Mar 23 09:18:55 2026 -0700"
      },
      "message": "Remove premature target writing before validation during `gn gen`.\n\nThis change modifies the way GN schedules writing targets to the\nNinja build plan to remove random crashes that have been affecting\nthe Fuchsia build for several weeks now.\n\nThe root cause of the problem, described in the associated bug,\nis that a target and *all* its dependencies, including validations,\nmust be resolved to ensure there are no crash during the write\n(which can call Target::GetMetadata() for generated_file() targets,\nwhich will walk standard and validation targets).\n\nBefore this CL, the code used the condition that a target had to\nbe resolved, and all its validations *defined*, which is NOT\nsufficient.\n\nThe crash was hidden by the fact that target resolution was pushed\nto the background, resulting in race conditions and non-deterministic\nordering of the writes. This behavior was removed in a previous CL,\nthe current one focuses on the actual logic fix.\n\nThe fix includes defining a new RecordState enum to better describe\nthe different states of a given BuilderRecord, replacing the simple\n`resolved_` boolean flag. State transitions can only happen under\nspecific conditions that are now properly documented.\n\n- builder_record.h: Introduce RecordState enum to model the\n  state of each record (Init/Defined/Resolved/Finalized). and\n  document them properly, along with the conditions when a\n  record can change state.\n\n  Rename resolved() to is_resolved(), can_write() to can_finalize(),\n  add is_defined() and is_finalized()\n\n  Add Set{Defined,Resolved,Finalized}() methods to change the\n  state and document what the caller should do just after that\n  to ensure proper tracking of state changes.\n\n  Add NotifyWaitingDependentsOnXXX() template methods to\n  clarify the builder.cc code and keep the BuilderRecordSet\n  values hidden.\n\n  Remove validation_deps_ which is no longer useful.\n\n  Rename the BuilderRecordSet variables for clarity, better\n  explaining their purpose.\n\n  Add DEBUG_BUILDER_RECORD macro. Set this to 1 to enable\n  debug logs during Builder operations during development.\n\n- builder.cc: Add FinalizeItem() method, and modify the logic\n  accordingly, using the new BuilderRecord methods. Add\n  DEBUG_BUILDER_RECORD_LOG() statements to print debug traces\n  when DEBUG_BUILD_RECORD is set to 1.\n\n- builder_unittest.cc: Adjust unit-tests to reflect the new\n  logic.\n\nBenchmarking shows now statistically difference in `gn gen`\nand `gn gen --check` times for Fuchsia and Chrome builds on\na local cloudtop.\n\nBug: 494481832\nChange-Id: Ibeae5350818c6b73fb88247fc73f85ab596c9531\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21721\nCommit-Queue: David Turner \u003cdigit@google.com\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@google.com\u003e\n"
    },
    {
      "commit": "755ea88213fc46818ede21a28fc2c191e2a24bcb",
      "tree": "13b6a5d5ddb79a90070397cf43cd6213a4ccfcdb",
      "parents": [
        "3007f57168dbe495a6a0a206c4ac54aca9a0d56f"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Mar 23 09:49:29 2026 +0000"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Mar 23 09:18:36 2026 -0700"
      },
      "message": "Only run target checks in background threads during resolution.\n\nBefore this CL, Target::OnResolved() did propagate information\nfrom dependencies to finalize the instance\u0027s state, and would\nalso run several checks to report errors.\n\nThe CL separates these into Target::OnResolvedWithoutChecks()\nand Target::RunChecksAfterResolution(), then modifies the\nBuilder::ResolveItem() implementation to only call the latter\nin background threads, while keeping the call to the former\nin the main thread.\n\nThis ensures that the result of resolution is deterministic,\nthus removing a source of data races that masked the problems\ndescribed in the associated bug.\n\nThis CL does *not* fix the issue though, this will happen\nin a future CL. Benchmarking shows no statistical difference\nin `gn gen` and `gn gen --check` times for a Chrome/Android\nbuild configuration.\n\nBug: 494481832\nChange-Id: I3947709fbda2fb39ccc75c620f8b9d535e0d3d26\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21720\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: David Turner \u003cdigit@google.com\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@google.com\u003e\n"
    },
    {
      "commit": "3007f57168dbe495a6a0a206c4ac54aca9a0d56f",
      "tree": "0cbd269422577be8b2e0a187b32b937082e1bf2a",
      "parents": [
        "335219e2893b5a3b30ec8ce27d48ec762c7de1d5"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Fri Mar 13 04:07:41 2026 +1100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Mar 18 18:52:49 2026 -0700"
      },
      "message": "Add additional files to gitignore\n\nChange-Id: I495b39adbdc251be33ff321934b0d5c36a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21700\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "335219e2893b5a3b30ec8ce27d48ec762c7de1d5",
      "tree": "27e22fc5d1471d96baa37e8f4826c4b420404227",
      "parents": [
        "85999e373ecd67856f283cdb79052697bca694a3"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Tue Mar 10 00:24:21 2026 +1100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Mar 18 04:24:45 2026 -0700"
      },
      "message": "Add `inputs` parameter to `tool`.\n\nThis allows tools to specify what files are required for the tools\nitself, thus better supporting remote actions.\n\nEg. cxx rules might add inputs \u003d [ clang ].\nA rule with command `python3 foo.py` (where foo.py imports bar.py) would\nspecify both foo.py and bar.py.\n\nBUG\u003db:491242305\n\nChange-Id: If5381bb944aa616c2a5d2435b6cb8e416a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21440\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "85999e373ecd67856f283cdb79052697bca694a3",
      "tree": "162c49ec9eec6ec5860a11b6dbd31b3f7a05d077",
      "parents": [
        "d22fa2d126d8e4db585e9db0f3fb2fb4e0bf601b"
      ],
      "author": {
        "name": "Richard Wang",
        "email": "richardwa@google.com",
        "time": "Wed Mar 18 00:31:05 2026 -0700"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Mar 18 00:42:51 2026 -0700"
      },
      "message": "Unit test foo* not just *foo patterns\n\nBug: b/493760346\nChange-Id: I9919e2d7da5ba8ae7fcf7a9770b0b414c697aadf\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21640\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Richard Wang \u003crichardwa@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "d22fa2d126d8e4db585e9db0f3fb2fb4e0bf601b",
      "tree": "10964d47d9418c37b52490aa485198a3e3fa8cfd",
      "parents": [
        "2941d2a26fa9cef3103f10e1dee5da7cd404008a"
      ],
      "author": {
        "name": "Richard Wang",
        "email": "richardwa@google.com",
        "time": "Tue Mar 17 23:19:41 2026 -0700"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Mar 17 23:48:36 2026 -0700"
      },
      "message": "Unit test edge cases around consecutive \\b in patterns\n\nCurrent behavior is if \\b consumes the start of a string, consecutive \\b\nis not allowed to consume the end of the string.\n\nShould also be unaffected by wildcard.\n\nBug: b/493760346\nChange-Id: If743daa0f2ed0a0908e3ee25a7652438fa2603d0\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21620\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Richard Wang \u003crichardwa@google.com\u003e\n"
    },
    {
      "commit": "2941d2a26fa9cef3103f10e1dee5da7cd404008a",
      "tree": "6c51bb856204080df9e039f6172c9072837f79ff",
      "parents": [
        "382e68c6db30e7061e5898c14574aed4c9be7079"
      ],
      "author": {
        "name": "Nico Weber",
        "email": "thakis@chromium.org",
        "time": "Mon Mar 09 12:43:52 2026 -0400"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Mar 12 08:29:33 2026 -0700"
      },
      "message": "Reject newlines in string config values (defines, cflags, etc.)\n\nA literal newline in a define or flag value would be written verbatim\ninto ninja files, breaking ninja\u0027s line-based parsing. Rather than\ntrying to escape newlines (which would work on POSIX via $$\u0027\\n\u0027 but\nhas no equivalent for cmd.exe on Windows), reject them with a clear\nerror at GN time. A newline in a compiler flag is almost certainly\na mistake anyway.\n\nThe validation is in GetStringList() so it covers all string config\nvalues: defines, cflags, cflags_c, cflags_cc, cflags_objc,\ncflags_objcc, asmflags, arflags, ldflags, rustflags, rustenv, and\nswiftflags.\n\nBefore, without the pkg-config.py change in the linked bug, things\nfailed at build time:\n\n```\n% autoninja -C out/gnlinux  base_unittests\noffline mode\nninja: Entering directory `out/gnlinux\u0027\n 0.20s load build.ninja failed:\n\n 1.47s Error: failed to load build.ninja: toolchain.ninja: line:61052: unexpected indent: \"  include_dirs \u003d\n```\n\nNow, the fail at `gn gen` time instead:\n\n```\n% ~/src/gn/out/gn gen out/gnlinux\n//build/config/linux/pkg-config.py [\"-s\", \"../../build/linux/debian_bullseye_amd64-sysroot\", \"-a\", \"x64\"] []\nERROR at //build/config/linux/atk/BUILD.gn:33:5: Newlines in defines values are not supported.\n    \"ATK_LIB_DIR\u003d\\\"$atk_lib_dir\\\"\",\n    ^-----------------------------\nThe value `ATK_LIB_DIR\u003d\"[[],[],[],[],[]]\n\"` contains a newline.\nSee //build/config/linux/atk/BUILD.gn:19:1: whence it was called.\npkg_config(\"atk\") {\n^------------------\nSee //ui/accessibility/BUILD.gn:465:20: which caused the file to be included.\n      configs +\u003d [ \"//build/config/linux/atk\" ]\n                   ^-------------------------\n```\n\nBug: 40176116\nChange-Id: I870d625552087430f5a679b8668a1929662e7b4a\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21460\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Nico Weber \u003cthakis@chromium.org\u003e\nReviewed-by: Nico Weber \u003cthakis@google.com\u003e\n"
    },
    {
      "commit": "382e68c6db30e7061e5898c14574aed4c9be7079",
      "tree": "2a46ac0c282ee495a61f7a94964b26ef933ba84c",
      "parents": [
        "83c605e5dcc3db2945291da1760ca9abd6343338"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Thu Mar 12 08:11:55 2026 +1100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Mar 11 19:59:26 2026 -0700"
      },
      "message": "Set clang-format to use C++20\n\nIt\u0027s currently failing on the spaceship operator, introduced in C++20\n\nChange-Id: Ic389688fc7f1544df34538d14e7acb666a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21500\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "83c605e5dcc3db2945291da1760ca9abd6343338",
      "tree": "9d4e35a0f117b22f495b75bbd797a1d5af9a3752",
      "parents": [
        "129ce6b9af1a93143acd8f8dea6fb8c6cb65abc9"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Thu Mar 12 12:57:29 2026 +1100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Mar 11 19:25:56 2026 -0700"
      },
      "message": "Run formatter\n\nChange-Id: I2e6658da5c61415897b9e4fa936cebf66a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21520\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "129ce6b9af1a93143acd8f8dea6fb8c6cb65abc9",
      "tree": "80566ed6c7fcf75a86aa709040c7b443cff507d6",
      "parents": [
        "d8c2f07d653520568da7cace755a87dad241b72d"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Wed Mar 11 15:29:55 2026 +1100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Mar 10 22:16:21 2026 -0700"
      },
      "message": "Bump min mac version flag.\n\nThis allows std::format to be used.\n\nChange-Id: If8a51d0358c65977f85171b996a0033f6a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21480\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "d8c2f07d653520568da7cace755a87dad241b72d",
      "tree": "c75259ab4aec670051dc6e35f38e8e929df0121d",
      "parents": [
        "3c855e612eba4a7c6f76c81a6c9f08ad1f438675"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Fri Mar 06 01:36:55 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Mar 05 08:46:26 2026 -0800"
      },
      "message": "Add --error-limit flag to control error output count\n\nThis introduces a new command-line flag --error-limit to allow users to\nspecify the maximum number of errors displayed. It sets a default limit\nof 10 errors when the flag is not provided, preventing terminal flooding\nduring builds with numerous errors.\n\nThis change also modifies Err::PrintToStdout() and\nErr::PrintNonfatalToStdout() to return a boolean indicating whether the\nerror was actually printed or suppressed. This allows callers to\ngracefully handle cases where the error output is suppressed by the\nlimit, avoiding unnecessary formatting additions such as empty newlines\nor separators.\n\nChange-Id: I3b53be631575a4b444c75e4762353fa4eb8f113a\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21380\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\n"
    },
    {
      "commit": "3c855e612eba4a7c6f76c81a6c9f08ad1f438675",
      "tree": "09ccb2334c5d8e2dc2ce65619c3365559fa5682d",
      "parents": [
        "ef0e05897cd0ae1dfa2d9a881e17957cf1841add"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Thu Mar 05 10:48:45 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Mar 05 03:31:21 2026 -0800"
      },
      "message": "[gn] Fix Value::operator\u003d\u003d for empty lists\n\nThe previous Copy-On-Write optimization for ValueList in\nhttps://gn-review.googlesource.com/c/gn/+/21340 introduced a bug where\nValue::operator\u003d\u003d would return false if one list was unallocated\n(list_ptr_ \u003d\u003d nullptr) and the other was explicitly allocated but empty.\n\nThis commit removes the explicit nullptr check in operator\u003d\u003d, allowing\nempty lists to be compared properly via list_value(), and adds a unit\ntest to prevent regressions.\n\nBug: 484863025\nChange-Id: I9c4bdd53fb22700ce389c9e3f8a3f12fd928c26d\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21360\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\nReviewed-by: David Turner \u003cdigit@google.com\u003e\n"
    },
    {
      "commit": "ef0e05897cd0ae1dfa2d9a881e17957cf1841add",
      "tree": "033d99c5f0bee5462c9199b5447c178d0ec451ee",
      "parents": [
        "a155c8c78af4030169a8da4886dc0c6b170535de"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Thu Mar 05 10:13:43 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Mar 04 17:23:03 2026 -0800"
      },
      "message": "[gn] Optimize Value::LIST with Copy-On-Write using nullptr\n\nTo reduce the execution time of `gn gen`, the internal holding of\nValue::LIST was changed from `std::vector\u003cValue\u003e` to\n`scoped_refptr\u003cValueList\u003e` to enable Copy-On-Write (COW).\n\nThis reduces unnecessary deep copies and allocation overhead for large\nlists, significantly improving performance.\n\nPerformance benchmark comparing this optimization to the main branch:\nBenchmark 1: gn_unoptimized gen out/Default\n  Time (mean ± σ):      2.384 s ±  0.085 s    [User: 23.577 s, System: 20.115 s]\n\nBenchmark 2: gn_optimized gen out/Default\n  Time (mean ± σ):      2.051 s ±  0.043 s    [User: 21.155 s, System: 19.339 s]\n\nSummary\n  gn_optimized ran 1.16 ± 0.05 times faster than gn_unoptimized\n\nBug: 484863025\nChange-Id: I08a3d8f5bc2dd9c794fb06a99de48ec0c36e18d8\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21340\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\nReviewed-by: David Turner \u003cdigit@google.com\u003e\n"
    },
    {
      "commit": "a155c8c78af4030169a8da4886dc0c6b170535de",
      "tree": "18128876ab83a9eb4fd6255428669fa3606f134a",
      "parents": [
        "1a310e88443018837759c952b113846b0096f65b"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Tue Mar 03 17:49:41 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Mar 03 03:10:31 2026 -0800"
      },
      "message": "Capture C++ modules compilation commands in compile_commands.json\n\nThis change ensures that .modulemap files are included in the exported\ncompilation database. It also implements the {{cc_module_name}}\nsubstitution to correctly generate -fmodule-name flags in the compile\ncommands.\n\nModified compile_commands_writer_unittest.cc to verify that module\ncompilation commands are correctly generated and included.\n\nThis is to fix https://crbug.com/475763034#comment9\n\nBug: 475763034\nChange-Id: I3693cb555a30df9082f611aa690e561d1427d4ff\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21320\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "1a310e88443018837759c952b113846b0096f65b",
      "tree": "94f2c871756e8a58a2395d22777be34c383f27eb",
      "parents": [
        "6767e99aea9e7c32b6fc421ad3271ab99a82ca78"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Thu Feb 26 16:34:37 2026 +1100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Feb 25 21:53:21 2026 -0800"
      },
      "message": "Output -fmodule-map-file as well as -fmodule-file for module dependencies.\n\nWhenever we currently use modules, we have to write:\n\nsource_set(\"foo_pcm\") {\n  sources \u003d [\"foo.modulemap\"]\n}\n\nconfig(\"foo_config\") {\n  cflags \u003d [\"-fmodule-map-file\u003dfoo.modulemap\"]\n}\n\ngroup(\"foo\") {\n  public_deps \u003d [\":foo_pcm\"]\n  public_configs \u003d [\":foo_config\"]\n}\n\nChange-Id: Ic48090a3a6cc5aaadb5feb95716d57f06a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21280\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "6767e99aea9e7c32b6fc421ad3271ab99a82ca78",
      "tree": "ee0ed4d7bc9025fbf82f612160bb3ea2ed3a9e5b",
      "parents": [
        "47b40ef49e678319c0dac767a95a363cc3f1f6cb"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Wed Feb 25 15:35:03 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Feb 25 17:36:03 2026 -0800"
      },
      "message": "Optimize HeaderChecker by parallelizing ReachabilityCache pre-calculation and removing lock contention.\n\nThis change introduces a pre-calculation phase in HeaderChecker::Run\nthat concurrently populates the ReachabilityCache for all relevant\ntargets using a WorkerPool. It also eliminates lock contention during\nthe file-checking phase by using atomic completion flags and a lock-free\nfast path in ReachabilityCache::SearchForDependencyTo.\n\nKey optimizations:\n- Concurrent BFS pre-calculation during HeaderChecker::Run.\n- Reusing the WorkerPool across pre-calculation and file-checking phases.\n- Lock-free dependency lookup using std::atomic\u003cbool\u003e completion flags\n  with acquire/release semantics in the common case where the cache is warm.\n- Significantly reduces lock contention (shared_mutex) on macOS.\n\nVerified with existing HeaderChecker unittests and profiling on\nChromium.\n\nBenchmark 1: ./gn_main gen --root\u003d/Users/tikuta/chromium/src --check\n/Users/tikuta/chromium/src/out/no_clang_modules\n  Time (mean ± σ):      6.306 s ±  0.025 s    [User: 27.219 s, System: 21.382 s]\n  Range (min … max):    6.283 s …  6.333 s    5 runs\n\nBenchmark 2: ./gn_optimized gen --root\u003d/Users/tikuta/chromium/src\n--check /Users/tikuta/chromium/src/out/no_clang_modules\n  Time (mean ± σ):      6.083 s ±  0.024 s    [User: 27.499 s, System: 26.226 s]\n  Range (min … max):    6.049 s …  6.112 s    5 runs\n\nSummary\n  ./gn_optimized gen --root\u003d/Users/tikuta/chromium/src --check /Users/tikuta/chromium/src/out/no_clang_modules ran\n    1.04 ± 0.01 times faster than ./gn_main gen --root\u003d/Users/tikuta/chromium/src --check /Users/tikuta/chromium/src/out/no_clang_modules\n\nBug: 484862257\nChange-Id: I4c9609f0b57693a1a209f4c36b810bb1597a39a9\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21260\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "47b40ef49e678319c0dac767a95a363cc3f1f6cb",
      "tree": "cf1c295a938c6d15e927a0843bf4e885bc6a1c00",
      "parents": [
        "bfffe163a23e55b944a3b4d5b9ce0ded126f414a"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Tue Feb 24 22:45:42 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Feb 24 05:56:00 2026 -0800"
      },
      "message": "Optimize HeaderChecker file I/O by parsing files only once\n\nInstead of scheduling a separate task for each Target that includes a\ngiven file, this change groups targets by the file they need to check.\nWe then pass the list of targets to `CheckFile`, which opens the file,\nreads its contents, and parses the `#include` directives exactly once.\n\nThis significantly reduces:\n- File I/O (open/read/close operations are reduced to 1 per file)\n- CIncludeIterator allocations and parsing overhead\n- Number of tasks scheduled in WorkerPool, reducing condition variable waits\n  and thread synchronization overhead.\n\nBased on local sample profiling with `gn gen --check` on no clang\nmodules build, total self-time spent in system locks (WorkerPool waits)\nand I/O decreased substantially.\n\n`hyperfine` benchmarking shows ~1.23x speedup and a ~43% reduction in\n`System` execution time (kernel mode threads / locks / IO overhead) on\nmacOS:\n\nBenchmark 1: out/gn_main gen ...\n  Time (mean ± σ):      7.689 s ±  0.049 s    [User: 27.350 s, System: 38.073 s]\n  Range (min … max):    7.581 s …  7.749 s    10 runs\n\nBenchmark 2: out/gn_fast gen ...\n  Time (mean ± σ):      6.265 s ±  0.047 s    [User: 27.103 s, System: 21.643 s]\n  Range (min … max):    6.149 s …  6.312 s    10 runs\n\nSummary\n  out/gn_fast ... ran\n    1.23 ± 0.01 times faster than out/gn_main ...\n\nBug: 484862257\nChange-Id: If5cb8b04674fce929d972e4759021578e79e87ed\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21220\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "bfffe163a23e55b944a3b4d5b9ce0ded126f414a",
      "tree": "c45e8e78114ba6cacc996d60f0b0232948a02cae",
      "parents": [
        "2c775ed71ed9c7ceb11823ced47a1a2640883403"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Tue Feb 24 16:11:40 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Feb 24 00:18:52 2026 -0800"
      },
      "message": "Optimize reachability cache to drastically reduce BFS executions\n\nThe most significant part of this optimization is caching the\nreachability search results starting from a \u0027from_target\u0027. By sharing\nthis cache across all files and includes within the same target, we\navoid redundant, expensive BFS traverses, which was the primary\nbottleneck.\n\nBenchmark results on macOS (hyperfine):\n\nBenchmark 1: gn_main gen out/no_clang_modules/ --check\n  Time (mean ± σ):     15.978 s ±  0.107 s    [User: 139.317 s, System: 20.336 s]\n  Range (min … max):   15.845 s … 16.141 s    10 runs\n\n\nBenchmark 2: gn_bfs_cache gen out/no_clang_modules/ --check\n  Time (mean ± σ):      7.578 s ±  0.048 s    [User: 23.380 s, System: 38.648 s]\n  Range (min … max):    7.481 s …  7.656 s    10 runs\n\nSummary\n  gn_bfs_cache ran 2.11 ± 0.02 times faster than gn_main\n\nAdditionally, this change:\n- Shards the cache into 64 shards using std::unordered_map and fine-grained\n  locking (std::shared_mutex) to reduce lock contention during concurrent\n  checks.\n- Uses std::unique_ptr for ReachabilityCache to safely manage non-copyable\n  objects (due to the included mutex).\n\nBug: 484862257\nChange-Id: I9a85e813ba942384eb1237fa965e447b1224659d\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21160\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "2c775ed71ed9c7ceb11823ced47a1a2640883403",
      "tree": "f23679eb5e646a8ba550eec307e7eb33da72d6c2",
      "parents": [
        "f89602568a56f43181461595d62104dac95585e2"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Fri Feb 20 23:54:02 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Feb 20 07:02:58 2026 -0800"
      },
      "message": "Remove unused targets_count_ in HeaderChecker\n\nChange-Id: Iff3879d6854555d7ed722717c1dee60537377974\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21200\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nCommit-Queue: David Turner \u003cdigit@google.com\u003e\n"
    },
    {
      "commit": "f89602568a56f43181461595d62104dac95585e2",
      "tree": "5002f15a1d80a69216c7b45b7b475b7a64f515f5",
      "parents": [
        "2d1bf87c34a9ec952aac98bc6d88b978abfa9981"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Fri Feb 20 12:43:57 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Feb 20 05:20:31 2026 -0800"
      },
      "message": "Apply clang-format\n\nChange-Id: I4cec8add2eef76b2ec671dfba5a15ddb03067749\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21180\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "2d1bf87c34a9ec952aac98bc6d88b978abfa9981",
      "tree": "4879ba8f1aa86b332d7f4a0a1c2145d44c3cd572",
      "parents": [
        "318ec1d2db43c1dc1e1810afb8e7fe524d7a64f2"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Thu Feb 19 23:41:51 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Feb 19 07:33:31 2026 -0800"
      },
      "message": "Use high-performance cores on Apple Silicon for worker pool\n\nOn macbook with M4 Max which has 12 high performance + 4 efficient\ncores, using only high performance core is faster than 8 threads for `gn\ngen`. To reduce lock contention in lock for DependencyCache, this also\nintroduces sharding for that.\n\n`gn gen` for build config with 30k targets,\n\n```\n$ hyperfine --warmup 1 \"~/ghq/gn.googlesource.com/gn/out/gn_main gen out/Default\" \"~/ghq/gn.googlesource.com/gn/out/gn_shard gen out/Default\"\nBenchmark 1: ~/ghq/gn.googlesource.com/gn/out/gn_main gen out/Default\n  Time (mean ± σ):      1.962 s ±  0.024 s    [User: 9.090 s, System: 2.124 s]\n  Range (min … max):    1.927 s …  1.997 s    10 runs\n\nBenchmark 2: ~/ghq/gn.googlesource.com/gn/out/gn_shard gen out/Default\n  Time (mean ± σ):      1.818 s ±  0.018 s    [User: 9.632 s, System: 3.990 s]\n  Range (min … max):    1.794 s …  1.848 s    10 runs\n\nSummary\n  ~/ghq/gn.googlesource.com/gn/out/gn_shard gen out/Default ran\n    1.08 ± 0.02 times faster than ~/ghq/gn.googlesource.com/gn/out/gn_main gen out/Default\n```\n\n`gn gen --check` for build config with 30k targets,\n\n```\n$ hyperfine --warmup 1 \"~/ghq/gn.googlesource.com/gn/out/gn_main gen out/Default --check\" \"~/ghq/gn.googlesource.com/gn/out/gn_shard gen out/Default --check\"\nBenchmark 1: ~/ghq/gn.googlesource.com/gn/out/gn_main gen out/Default --check\n  Time (mean ± σ):      6.569 s ±  0.063 s    [User: 21.740 s, System: 15.753 s]\n  Range (min … max):    6.500 s …  6.687 s    10 runs\n\nBenchmark 2: ~/ghq/gn.googlesource.com/gn/out/gn_shard gen out/Default --check\n  Time (mean ± σ):      4.968 s ±  0.035 s    [User: 21.436 s, System: 24.465 s]\n  Range (min … max):    4.903 s …  5.033 s    10 runs\n\nSummary\n  ~/ghq/gn.googlesource.com/gn/out/gn_shard gen out/Default --check ran\n    1.32 ± 0.02 times faster than ~/ghq/gn.googlesource.com/gn/out/gn_main gen out/Default --check\n```\n\n`gn gen` for build config with 40k targets,\n\n```\n$ hyperfine --warmup 1 \"~/ghq/gn.googlesource.com/gn/out/gn_main gen out/no_clang_modules\" \"~/ghq/gn.googlesource.com/gn/out/gn_shard gen out/no_clang_modules\"\nBenchmark 1: ~/ghq/gn.googlesource.com/gn/out/gn_main gen out/no_clang_modules\n  Time (mean ± σ):      2.854 s ±  0.047 s    [User: 13.619 s, System: 3.021 s]\n  Range (min … max):    2.760 s …  2.905 s    10 runs\n\nBenchmark 2: ~/ghq/gn.googlesource.com/gn/out/gn_shard gen out/no_clang_modules\n  Time (mean ± σ):      2.496 s ±  0.028 s    [User: 14.474 s, System: 5.201 s]\n  Range (min … max):    2.458 s …  2.545 s    10 runs\n\nSummary\n  ~/ghq/gn.googlesource.com/gn/out/gn_shard gen out/no_clang_modules ran\n    1.14 ± 0.02 times faster than ~/ghq/gn.googlesource.com/gn/out/gn_main gen out/no_clang_modules\n```\n\n`gn gen --check` for build config with 40k targets,\n\n```\n$ hyperfine --warmup 1 \"~/ghq/gn.googlesource.com/gn/out/gn_main gen out/no_clang_modules --check\" \"~/ghq/gn.googlesource.com/gn/out/gn_shard gen out/no_clang_modules --check\"\nBenchmark 1: ~/ghq/gn.googlesource.com/gn/out/gn_main gen out/no_clang_modules --check\n  Time (mean ± σ):     21.681 s ±  0.178 s    [User: 133.529 s, System: 16.690 s]\n  Range (min … max):   21.454 s … 21.901 s    10 runs\n\nBenchmark 2: ~/ghq/gn.googlesource.com/gn/out/gn_shard gen out/no_clang_modules --check\n  Time (mean ± σ):     15.762 s ±  0.212 s    [User: 143.211 s, System: 26.597 s]\n  Range (min … max):   15.537 s … 16.215 s    10 runs\n\nSummary\n  ~/ghq/gn.googlesource.com/gn/out/gn_shard gen out/no_clang_modules --check ran\n    1.38 ± 0.02 times faster than ~/ghq/gn.googlesource.com/gn/out/gn_main gen out/no_clang_modules --check\n```\n\nThis also improves --check performance on linux,\n\n```\n$ hyperfine --warmup 1 \"~/ghq/gn.googlesource.com/gn/out/gn_main gen out/Default --check\" \"~/ghq/gn.googlesource.com/gn/out/gn_shard gen out/Default --check\"\nBenchmark 1: ~/ghq/gn.googlesource.com/gn/out/gn_main gen out/Default --check\n  Time (mean ± σ):      8.296 s ±  0.136 s    [User: 76.245 s, System: 55.341 s]\n  Range (min … max):    8.106 s …  8.492 s    10 runs\n\nBenchmark 2: ~/ghq/gn.googlesource.com/gn/out/gn_shard gen out/Default --check\n  Time (mean ± σ):      5.575 s ±  0.069 s    [User: 76.813 s, System: 100.234 s]\n  Range (min … max):    5.403 s …  5.653 s    10 runs\n\nSummary\n  ~/ghq/gn.googlesource.com/gn/out/gn_shard gen out/Default --check ran\n    1.49 ± 0.03 times faster than ~/ghq/gn.googlesource.com/gn/out/gn_main gen out/Default --check\n```\n\nBug: 484862257\nBug: 484863025\nChange-Id: I7d54762dcdfaaddb81aff6fdeabb3f7efb3f9590\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21100\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "318ec1d2db43c1dc1e1810afb8e7fe524d7a64f2",
      "tree": "cf58e1347bbffe9f8f075820fbfdcccff43bb561",
      "parents": [
        "18d8e6dca7d74c240aabf9f44eea540ae565efb2"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Thu Feb 19 19:13:31 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Feb 19 03:48:41 2026 -0800"
      },
      "message": "Optimize HeaderChecker::IsDependencyOf using HashTableBase\n\nThis improved performance of `gn gen --check` from 55.7s to 21.7s on my\nM4 Max macbook as memory allocation in unordered_map seems slow on\nmacOS.\n\nBug: 484862257\nChange-Id: I688c316c72938087d65ad5487f554b10665a29e3\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21120\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: David Turner \u003cdigit@google.com\u003e\n"
    },
    {
      "commit": "18d8e6dca7d74c240aabf9f44eea540ae565efb2",
      "tree": "bc2adf2a5842fc9def1856804eb0c9340dd156a4",
      "parents": [
        "9d19a7870add65151ff91bcc26252bb7521065cf"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Wed Feb 18 22:48:05 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Feb 18 06:20:13 2026 -0800"
      },
      "message": "[perf] Optimize HeaderChecker BFS using reserve()\n\nThis optimization adds breadcrumbs.reserve() to\nHeaderChecker::IsDependencyOf to reduce the number of rehashes in the\nvisited nodes map during BFS.\n\nPerformance Impact (Chromium \u0027gn gen --check\u0027 on macOS):\n- Baseline (origin/main): 66.5s ± 0.4s\n- With this change: 58.1s ± 0.6s (approx. 13% faster)\n\nBug: 484862257\nChange-Id: I4e011f8539e4b2a9343d25f12898a3bc2ab23a93\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21080\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\nCommit-Queue: David Turner \u003cdigit@google.com\u003e\nReviewed-by: David Turner \u003cdigit@google.com\u003e\n"
    },
    {
      "commit": "9d19a7870add65151ff91bcc26252bb7521065cf",
      "tree": "86c1257ea7f67113ee2dd769071b846194fc2315",
      "parents": [
        "651e16f083bb30729561be1e8bb994893fc2bb53"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Tue Feb 17 17:13:10 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Feb 17 06:43:02 2026 -0800"
      },
      "message": "[perf] Share ResolvedTargetData across worker threads\n\nThis commit modifies ResolvedTargetData to be thread-safe using a\ncombination of std::shared_mutex for the target-to-info map and\nper-target mutexes with atomic flags for individual property\ncomputations (double-checked locking).\n\nBy sharing a single ResolvedTargetData instance across all worker\nthreads in command_gen.cc, we eliminate redundant computations of\ntransitive dependencies (libs, hard_deps, etc.) that were previously\nperformed independently by each thread.\n\nHyperfine benchmark results on a large Chromium build graph (gn gen):\n- main: 3.538 s ± 0.041 s [User: 18.883 s, System: 2.922 s]\n- shared: 2.894 s ± 0.041 s [User: 13.647 s, System: 3.072 s]\n- Improvement: ~22% faster wall-clock time, ~28% reduction in user CPU time.\n\nBug: 484863025\nChange-Id: Ib9c31feee6a118423b1bb6cf4e5552be660cb7c4\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21000\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: David Turner \u003cdigit@google.com\u003e\n"
    },
    {
      "commit": "651e16f083bb30729561be1e8bb994893fc2bb53",
      "tree": "ee9f8e65a62d00cae92f64f7c3f01e86e3f0e472",
      "parents": [
        "41942b7e214b6ad3614f31caa5e3281370fef767"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Tue Feb 17 22:14:32 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Feb 17 06:41:31 2026 -0800"
      },
      "message": "[perf] Cache dependency checks in HeaderChecker\n\nThis optimization introduces a thread-safe cache for IsDependencyOf\nresults in HeaderChecker.\n\nOn large projects like Chromium, \u0027gn gen --check\u0027 performs a massive\nnumber of include validations. Many of these involve checking\nreachability between the same pairs of targets over and over again. Each\ncheck previously required a full BFS traversal of the dependency graph.\n\nBy caching whether target A can depend on target B (and if the path is\npublicly permitted), we avoid the vast majority of these expensive\ntraversals.\n\nPerformance on Chromium \u0027gn gen --check\u0027:\n- Before: ~125 seconds\n- After: ~66 seconds (approx. 47% faster)\n- CPU user time reduced from ~16 minutes to ~8 minutes.\n\nBug: 484862257\nChange-Id: Ib46fef088039a145a53f1eb541c27f296a4df3ba\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21001\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: David Turner \u003cdigit@google.com\u003e\n"
    },
    {
      "commit": "41942b7e214b6ad3614f31caa5e3281370fef767",
      "tree": "fc0201c24f1192c19e05240f224f8ef5d79eba06",
      "parents": [
        "77e67153923384864b2baf977758f0dd896b9dbf"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Tue Feb 17 17:20:31 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Feb 17 03:11:50 2026 -0800"
      },
      "message": "[test] Fix SetupTest.AbsolutePythonPathInsideRootDir on macOS\n\nThe test was failing because it was comparing a path containing symlinks\n(e.g., /var/folders/...) with a resolved realpath (e.g., /private/var/folders/...).\nGN\u0027s Setup resolves the source root to its realpath, so the test needs\nto do the same for the temp directory it creates.\n\nBug: None\nChange-Id: I25bcb19e605eb580e5ac72f30646d90654b97665\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21020\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nCommit-Queue: David Turner \u003cdigit@google.com\u003e\n"
    },
    {
      "commit": "77e67153923384864b2baf977758f0dd896b9dbf",
      "tree": "cb577da912f3200ba1e11d3270ca53fd1dcc2dcf",
      "parents": [
        "304bbef6c7e9a86630c12986b99c8654eb7fe648"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Tue Feb 17 17:43:02 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Feb 17 02:22:31 2026 -0800"
      },
      "message": "[mac] Update minimum macOS version to 10.12\n\nSupporting 10.9 is becoming difficult and 10.12 is a more reasonable\nbaseline for modern features.\n\nThis is to avoid build error in\nhttps://ci.chromium.org/ui/p/gn/builders/try/mac/b8689634140536035409/overview\n\nhttps://endoflife.date/macos shows that 10.12 ends its support around 6\nyears ago.\n\nBug: 484863025\nChange-Id: Id3503eaa5e28526aede1eeb97dbab8816deb800d\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21021\nCommit-Queue: David Turner \u003cdigit@google.com\u003e\nReviewed-by: David Turner \u003cdigit@google.com\u003e\n"
    },
    {
      "commit": "304bbef6c7e9a86630c12986b99c8654eb7fe648",
      "tree": "5a006f0ae756136f2304f317b06030a9912c9eba",
      "parents": [
        "ae3a7d32826101f6586ac93dbd9f9106cbd57528"
      ],
      "author": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Wed Feb 04 18:47:57 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Feb 05 00:22:10 2026 -0800"
      },
      "message": "Include validations when collecting metadata\n\nSome Fuchsia tests depend on metadata to collect clippy output. This\nfailed because validations were not considered when collecting metadata.\n\nBug: 478798763\nChange-Id: Id213821800144a14c8113f13caf7833748679f0c\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20981\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Neri Marschik \u003cnerima@google.com\u003e\n"
    },
    {
      "commit": "ae3a7d32826101f6586ac93dbd9f9106cbd57528",
      "tree": "9300620061cb83d76f27d246d6deb62f336a8573",
      "parents": [
        "7498ca2e5e24b509ce679604ff46768f12098d48"
      ],
      "author": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Wed Feb 04 12:30:42 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Feb 05 00:22:01 2026 -0800"
      },
      "message": "Fix target being written twice under certain circumstances\n\nThe Fuchsia build triggered a situation where a target was written twice\nwhen it changed from ShouldGenerate false to true.\n\nA target can start out with `ShouldGenerate \u003d false` if it is not using\nthe default toolchain or there are root patterns that don\u0027t match.\n`RecursiveSetShouldGenerate` triggers writes for this target if another\ntarget is discovered that has `ShouldGenerate \u003d true` and depends on it.\n\nThe logic in `RecursiveShouldGenerateWithValidations` did not include\nthe new `CanWrite` check introduced with validations.\n\nThis CL colocates the logic into CheckAndTriggerWrite so the logic lives\nin one place.\n\nBug: 478798763\nChange-Id: I82413b8292f05fe38a7454446f01a42e7165f7ed\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20980\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Neri Marschik \u003cnerima@google.com\u003e\n"
    },
    {
      "commit": "7498ca2e5e24b509ce679604ff46768f12098d48",
      "tree": "15b66e78f068abced0bdb84d187aaa014c5ed0a6",
      "parents": [
        "b7f59176434925754f48c1459707e6be2dc20801"
      ],
      "author": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Fri Jan 30 13:33:33 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Feb 02 01:33:20 2026 -0800"
      },
      "message": "Add validation support to gn analyze/desc/path/refs\n\nGiven target `foo` having validation `clippy`\n\ndesc output:\n```\nTarget //:foo\ntype: group\ntoolchain: //toolchain:toolchain\n\n...\n\nDirect dependencies (try also \"--all\", \"--tree\", or even \"--all --tree\")\n  //:foo.dep\n\nvalidations\n  //:clippy\n```\n\npath output:\n```\n//:foo --[validation]--\u003e //:clippy\n```\n\nrefs output:\n```\n//:foo\n```\n\nBug: 478798763\nChange-Id: Ica196b758411cf502e0fdf0c5a8566d5615f9711\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20900\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Neri Marschik \u003cnerima@google.com\u003e\n"
    },
    {
      "commit": "b7f59176434925754f48c1459707e6be2dc20801",
      "tree": "16f7f5bbcf91e47d3a8d0608a1fcbbd153b010fc",
      "parents": [
        "3c0f5be7fc62dc070a3394002fd622b3dda12491"
      ],
      "author": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Mon Feb 02 13:50:39 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Feb 02 01:33:11 2026 -0800"
      },
      "message": "Fix race condition when using validations\n\nTo allow a validation B on a target A to depend on A I previously\ndecoupled resolution of A from resolution of B. While testing this with\nfuchsia I ran into a race condition where target A would be written\nwhile B was not fully resolved. This caused the Ninja file to contain\ngarbled output for B.\n\nThis CL decouples resolution and writing so that a target A can resolve\nbut waits with writing until all its validations are resolved too.\n\nBug: 478798763\nChange-Id: Ica3d89f90b3753fde9edbbf8ad7d9fe2e1ca372a\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20920\nCommit-Queue: Neri Marschik \u003cnerima@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "3c0f5be7fc62dc070a3394002fd622b3dda12491",
      "tree": "b520188b7c160e8e6fd9a48c66b669f994328efd",
      "parents": [
        "bd3356ac13f411b521b16b11da12cec5150e917c"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Fri Jan 30 17:17:45 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sun Feb 01 17:45:08 2026 -0800"
      },
      "message": "Add pcm files to the deps of phony target\n\nThis allows to build pcm files when we specify phony target as build\ntargets.\n\nBug: 464099050\nChange-Id: I670734af1461ded0b9a1698381b83fc9195a3ba0\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20880\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: David Turner \u003cdigit@google.com\u003e\n"
    },
    {
      "commit": "bd3356ac13f411b521b16b11da12cec5150e917c",
      "tree": "e97cd20c2725e085b0cfe840b50d44d1d33c3f4a",
      "parents": [
        "103f8b437f5e791e0aef9d5c372521a5d675fabb"
      ],
      "author": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Wed Jan 21 16:07:23 2026 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Jan 28 23:44:04 2026 -0800"
      },
      "message": "Add `validations` dependency type to targets\n\nThis introduces a new dependency type called validations. Validations\nare targets that must be built if the depending target is built, but\nwhich do not affect the result of the current target (unlike deps) and\nare not runtime-only dependencies (unlike data_deps).\n\nThis is primarily useful for declaring tasks like static analysis, style\nchecking, or other linters that should run alongside the build.\n\nBug: 478798763\nChange-Id: I7dff3394aaae9f70a7ceb93ffd661803409c3d7c\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20860\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Neri Marschik \u003cnerima@google.com\u003e\n"
    },
    {
      "commit": "103f8b437f5e791e0aef9d5c372521a5d675fabb",
      "tree": "0430df3eee996a30ea61180a197f6038254f14cf",
      "parents": [
        "1d89b9849536756d693467d67d4c03e910705ba4"
      ],
      "author": {
        "name": "Matthias Liedtke",
        "email": "mliedtke@chromium.org",
        "time": "Wed Jan 14 12:43:11 2026 +0100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Jan 14 10:42:37 2026 -0800"
      },
      "message": "Fix result of Scheduler::Run() with empty work queue\n\nScheduler::Run() should return true on success, not false.\nThis causes failures after\ncommit 9673115bc14c8630da5b7f6fe07e0b362ac49dcb which introduces a\npattern where g_scheduler-\u003eRun() is called in cases where there might\nnot be any scheduled tasks.\n\nBug: 475707985\nChange-Id: I0a3f17d717ccfb68bbf604b2589bc286d3a948a4\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20840\nCommit-Queue: Andrew Grieve \u003cagrieve@google.com\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@google.com\u003e\nReviewed-by: Greg Thompson \u003cgrt@chromium.org\u003e\nReviewed-by: Michael Achenbach \u003cmachenbach@google.com\u003e\n"
    },
    {
      "commit": "1d89b9849536756d693467d67d4c03e910705ba4",
      "tree": "06a7ed9f9bc837c4663d049951a987502b113f1b",
      "parents": [
        "9673115bc14c8630da5b7f6fe07e0b362ac49dcb"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Wed Jun 25 11:24:12 2025 +1000"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Jan 13 18:59:48 2026 -0800"
      },
      "message": "Add conductor setup files\n\nThis is required to use the AI development tool conductor with GN.\n\nThese files were automatically generated via conductor asking me a bunch\nof questions and having me respond. I then reviewed all the files and\nmanually edited things I didn\u0027t like.\n\nChange-Id: I3a13f02645ad0552602e2420fbc045806a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20800\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "9673115bc14c8630da5b7f6fe07e0b362ac49dcb",
      "tree": "91c5d4ca1424da4c71ec84f3780820903410f5b3",
      "parents": [
        "5550ba0f4053c3cbb0bff3d60ded9d867b6fa371"
      ],
      "author": {
        "name": "Greg Thompson",
        "email": "grt@chromium.org",
        "time": "Mon Dec 22 12:52:51 2025 +0100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sat Jan 10 00:21:34 2026 -0800"
      },
      "message": "Improve writing runtime deps\n\n- Due to a bug, the `found_files` set was never actually used to omit\n  duplicate deps. Since this apparently has never been an issue in\n  practice, remove the set and mention of it from comments.\n- Use a std::unordered_map for `seen_targets` to trade memory for speed.\n- Avoid a redundant lookup in `seen_targets` when a target is already\n  present.\n- Use emplace facilities in favor of copy/move where appropriate.\n- When calling WriteRuntimeDepsFile, stream the deps directly to the\n  output buffer rather than accumulating them in a vector and then\n  writing from the vector into the output buffer.\n- Parallelize collecting/writing the runtime deps files.\n\nThis reduces overall runtime by about 9% on my workstation.\n\nChange-Id: Ic5a10415348345a6f9473613b4391281d9e20605\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20700\nCommit-Queue: Greg Thompson \u003cgrt@chromium.org\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@google.com\u003e\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\n"
    },
    {
      "commit": "5550ba0f4053c3cbb0bff3d60ded9d867b6fa371",
      "tree": "f2a258507895d9185605ff19980b79f6ce83ba80",
      "parents": [
        "aac7c279c65fac36b116b0ebcf77e88581b60071"
      ],
      "author": {
        "name": "Richard Wang",
        "email": "richardwa@google.com",
        "time": "Wed Jan 07 00:06:17 2026 -0800"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Jan 07 00:22:41 2026 -0800"
      },
      "message": "Unit test label user visible name\n\nLabel is null if dir is null:\nhttps://source.chromium.org/gn/gn/+/main:src/gn/label.h;l\u003d45;drc\u003d2c3beac5f748c8eb581c14de5a2769a08762f0e8\n\nChange-Id: I640cbbce231bb23da26136707cffc95d1a01d8e0\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20740\nCommit-Queue: Richard Wang \u003crichardwa@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "aac7c279c65fac36b116b0ebcf77e88581b60071",
      "tree": "a0c0cc8a73a5aa98208c430e33584eea88ce244d",
      "parents": [
        "1a9fc6149393d0e9c175318e456660cef73fb327"
      ],
      "author": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Wed Dec 17 09:47:43 2025 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Jan 06 16:48:51 2026 -0800"
      },
      "message": "Improve error message for rebase_path builtin\n\nWhen rebase_path encounters an invalid path (e.g., an empty string), it\npreviously blamed the origin of the value. If the value originated from\nanother function (like read_file) or a variable definition far away,\nthe error message could be confusing as it pointed to the definition\nsite rather than the usage site.\n\nThis change improves the error reporting by:\n- Rewriting the error to blame the rebase_path call.\n- Appending the original error location as a sub-error. This makes it clear that\nrebase_path failed, while still providing context on where the bad value came\nfrom.\n\nBefore\n```\nERROR at //BUILD.gn:2:9: Empty directory path.\nlines \u003d read_file(\"test.txt\", \"list lines\")\n\t^---------------------------------\nYou can\u0027t use empty strings as directories.\n```\n\nAfter\n```\nERROR at //BUILD.gn:4:13: Empty directory path.\nrebase_path(lines)\n\t    ^----\nYou can\u0027t use empty strings as directories.\nSee //BUILD.gn:3:9: The value that caused the error.\nlines \u003d read_file(\"test.txt\", \"list lines\")\n\t^\n```\n\nChange-Id: I7c5d26ee13ac5fea3560a808a9d4262a0b9304fc\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20660\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nCommit-Queue: Neri Marschik \u003cnerima@google.com\u003e\n"
    },
    {
      "commit": "1a9fc6149393d0e9c175318e456660cef73fb327",
      "tree": "1e7e56f9ec2fa3319d05a6d4f1ef0ba4e80481f0",
      "parents": [
        "40aac3f15d34b3469e80b0c086a37bd069af2d6e"
      ],
      "author": {
        "name": "Richard Wang",
        "email": "richardwa@google.com",
        "time": "Mon Jan 05 22:29:39 2026 -0800"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Jan 05 22:44:00 2026 -0800"
      },
      "message": "Minor table-driven test refactor\n\nChange-Id: Idf7bc5d97b1ec9c560c2b0f4db96fe7e10e8d642\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20720\nCommit-Queue: Richard Wang \u003crichardwa@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "40aac3f15d34b3469e80b0c086a37bd069af2d6e",
      "tree": "ce8bad75466fa08f0b7c134be165a1785c696f8b",
      "parents": [
        "64d35867ca0a1088f13de8f4ccaf1a5687d7f1ce"
      ],
      "author": {
        "name": "Shezan Baig",
        "email": "sbaig1@bloomberg.net",
        "time": "Mon Jan 05 00:47:14 2026 -0500"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Jan 05 01:45:19 2026 -0800"
      },
      "message": "win: Use relative path for python in ninja files if possible\n\nOn Windows, `BuildSettings::python_path` returns the absolute path to\nthe script executable, even if it is within the root directory.  This\nmakes the ninja files non-portable because they include the absolute\npath on the machine where `gn` was run.\n\nThis commit makes it such that if python is within the root directory,\nwe will use a relative path to it from the build directory when\ngenerating the ninja rules.\n\nThis will allow us to setup siso rules to execute python scripts on\nremote machines for Windows.\n\nNote that we need to resolve the python path back to an absolute path when executing scripts within GN.\n\nChange-Id: I1a1c2895efd868fb4cc6c9b8e2c61167bfe59211\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20240\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: David Turner \u003cdigit@google.com\u003e\nReviewed-by: David Turner \u003cdigit@google.com\u003e\n"
    },
    {
      "commit": "64d35867ca0a1088f13de8f4ccaf1a5687d7f1ce",
      "tree": "e6a51be03308b2dda6a6a46b3ac072b02ba10468",
      "parents": [
        "3c188994b7717ff920966f670c178064c3c42c77"
      ],
      "author": {
        "name": "Milad Fa",
        "email": "mfarazma@ibm.com",
        "time": "Thu Dec 11 17:48:54 2025 +0000"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Dec 17 02:16:26 2025 -0800"
      },
      "message": "Fix sha2 on big endian\n\nhttps://gn-review.googlesource.com/c/gn/+/20540 has caused\na number of test failures on Big Endian because we don\u0027t need to\nByteSwap on said platforms.\n\nDrive-by: also fix the same issue in sha1.\n\nBug: chromium:463302946\nChange-Id: I7ccfbdf442da1cf99f7758593a313a5339c20cde\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20580\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nCommit-Queue: David Turner \u003cdigit@google.com\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@google.com\u003e\n"
    },
    {
      "commit": "3c188994b7717ff920966f670c178064c3c42c77",
      "tree": "8633689eec3b45ec44f0675da5bc6e49977edc48",
      "parents": [
        "4e0818fd86bffc0b4a4b61d3295a6732ba08d715"
      ],
      "author": {
        "name": "Greg Thompson",
        "email": "grt@chromium.org",
        "time": "Tue Dec 16 15:36:05 2025 +0100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Dec 17 00:34:45 2025 -0800"
      },
      "message": "[Windows] Reduce the number of worker threads on many-core machines\n\nTesting shows that performance decreases beyond about 14 threads on\nWindows. On my primary workstation, capping at 14 threads reduces\nruntime by 25% - 30% depending on the configuration (8s down to 6s or\n11s down to 7.5s).\n\nBug: none\nChange-Id: I17a4f5b8e913efcfa1998b9315362dcccac6f675\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20640\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\nCommit-Queue: Greg Thompson \u003cgrt@chromium.org\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@google.com\u003e\n"
    },
    {
      "commit": "4e0818fd86bffc0b4a4b61d3295a6732ba08d715",
      "tree": "958c8aa4a6c6509f23504f384ff1d8d0f8857de0",
      "parents": [
        "5964f499767097d81dbe034e8b541c3988168073"
      ],
      "author": {
        "name": "Daniel Cheng",
        "email": "dcheng@chromium.org",
        "time": "Fri Dec 05 01:35:19 2025 -0800"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Dec 10 10:15:30 2025 -0800"
      },
      "message": "Add a sha256 hash implementation and use it for string_hash\n\nEven for something that\u0027s not cryptographically-sensitive, it is better\nto avoid introducing new dependencies on known-broken hashes.\n\nBug: chromium:463302946\nChange-Id: Idc3dacc0d7d84845bfd3f9e9ec5147a7ec0347b2\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20540\nReviewed-by: Łukasz Anforowicz \u003clukasza@chromium.org\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@google.com\u003e\nCommit-Queue: Daniel Cheng \u003cdcheng@chromium.org\u003e\n"
    },
    {
      "commit": "5964f499767097d81dbe034e8b541c3988168073",
      "tree": "04d245b02c548d58ab54be8f2662f89cf692571a",
      "parents": [
        "0eb071f600702e6e235137ba133ee8834aeece83"
      ],
      "author": {
        "name": "Greg Thompson",
        "email": "grt@chromium.org",
        "time": "Thu Dec 04 14:34:34 2025 +0100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Dec 04 08:29:33 2025 -0800"
      },
      "message": "Opt-in to the Windows SegmentHeap\n\nThis heap offers vastly more efficient multi-threaded operations. Local\ntesting shows a reduction in generation for Chrome on the order of 50% -\n83% (from \u003e72s down to \u003c12s in one config; 17s down to 8s in another).\n\nChange-Id: Icf8be8de86652d0b343050d5f08427aae2c29dad\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20520\nReviewed-by: Andrew Grieve \u003cagrieve@google.com\u003e\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\nCommit-Queue: Sylvain Defresne \u003csdefresne@chromium.org\u003e\n"
    },
    {
      "commit": "0eb071f600702e6e235137ba133ee8834aeece83",
      "tree": "400e82cf823f4fd42265967332893f2b5f0d3195",
      "parents": [
        "bf891ce4ffa9a0686e4a6455a11823e5429af8f8"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Mon Dec 01 11:50:36 2025 +1100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Dec 02 21:25:29 2025 -0800"
      },
      "message": "Add a `module_name` flag to source_set.\n\nThis overrides the default module name, allowing you to have targets\n//foo:baz and //bar:baz not clash on their module names.\n\nFixed: chromium:465206266\nChange-Id: Ibb916df2889a2294b181acb9d35710576a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20502\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "bf891ce4ffa9a0686e4a6455a11823e5429af8f8",
      "tree": "03c6e859c0b3677f51e048268f3eaa2f0ecdbd40",
      "parents": [
        "8450d601b96c8117e0556dbf7acacd30436cefdf"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Mon Dec 01 11:50:36 2025 +1100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Dec 02 18:58:09 2025 -0800"
      },
      "message": "Refactor module name to be dynamic.\n\nThe target //foo:baz and //bar:baz will both always share a module name of \"baz\", which is not allowed.\n\nThis lays the groundwork to allow custom module names via the\nTarget-\u003emodule_name() method.\n\nBug: chromium:465206266\nChange-Id: I1e8ecf135b48cc100e3fad75ce6876866a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20500\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\n"
    },
    {
      "commit": "8450d601b96c8117e0556dbf7acacd30436cefdf",
      "tree": "a36563b3f5e8fe08c7d5e576cdf2d4b84953fce1",
      "parents": [
        "6e0b557db44b3c164094e57687d20ba036a80667"
      ],
      "author": {
        "name": "Jeffrey Yu",
        "email": "yuje@google.com",
        "time": "Tue Dec 02 14:33:41 2025 -0800"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Dec 02 15:09:51 2025 -0800"
      },
      "message": "Optimize vector creation in compile_commands_writer.cc.\n\nThis change uses range-based initialization for vectors, which is\ngenerally more efficient than push_back in a loop as it avoids having to\ndo a per-loop capacity check.\n\nChange-Id: I1fad702bc772f7c5f4f9b9dac3d73b55c0fe4503\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20160\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: David Turner \u003cdigit@google.com\u003e\n"
    },
    {
      "commit": "6e0b557db44b3c164094e57687d20ba036a80667",
      "tree": "5827dc134eb1d19a3f60ea2c423f1ae3dbc24f6b",
      "parents": [
        "ab6f8b2124b02000f5ffcabb904622f17de6a1e5"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Mon Dec 01 13:09:47 2025 +1100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sun Nov 30 19:09:50 2025 -0800"
      },
      "message": "Run \u0027tools/run_formatter.sh\u0027\n\nChange-Id: Iac05588e4f5608a43fa18c63646c164c6a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20501\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "ab6f8b2124b02000f5ffcabb904622f17de6a1e5",
      "tree": "36ad6ca65492fabd82ee05170075bcf27d3545cd",
      "parents": [
        "d92aee2294ac1eb1f3143d9016688f0164d0addd"
      ],
      "author": {
        "name": "Lukasz Anforowicz",
        "email": "lukasza@chromium.org",
        "time": "Tue Nov 25 18:54:59 2025 +0000"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Nov 25 11:51:04 2025 -0800"
      },
      "message": "Implement `string_hash` function.\n\nBug: chromium:463302946\nChange-Id: Iffb1f9071ac23e3a0fc55f5f3bec9f40e142b254\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20480\nReviewed-by: Andrew Grieve \u003cagrieve@google.com\u003e\nCommit-Queue: Łukasz Anforowicz \u003clukasza@chromium.org\u003e\n"
    },
    {
      "commit": "d92aee2294ac1eb1f3143d9016688f0164d0addd",
      "tree": "0a39f6297260ae103309687ba61969ed2b6ea246",
      "parents": [
        "4619125bd337d259c0dc9f958d0102adc99d2543"
      ],
      "author": {
        "name": "XiaoPeng Li",
        "email": "sweeper1203@gmail.com",
        "time": "Fri Nov 14 22:40:40 2025 +0800"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Nov 25 06:43:12 2025 -0800"
      },
      "message": "Support weak_libraries\n\nSometimes we need to link to libraries that are only supported in newer versions of macOS,\nor symbols that only exist in newer versions of macOS. The `-weak_library` linking parameter\ncan help us achieve this. When a library file or symbol is missing, dyld will bind the symbol\nto NULL (instead of immediately exiting the program), allowing the application to determine\nat runtime whether to use the new feature.\n\nRelated to https://gn-review.googlesource.com/c/gn/+/6660\n\nUnlike -weak_framework, -weak_library requires a library file path, not\na name.\n\nReference: https://developer.apple.com/library/archive/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html\nChange-Id: I6fa09f798108a805456b2def6d2edc56d36d100b\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20320\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "4619125bd337d259c0dc9f958d0102adc99d2543",
      "tree": "f29a5f7601f33bdd0e2ec2b3b868d4f3cdf21535",
      "parents": [
        "fb3b73df3c0d2ad7f41ebc91c6905e90dcb518ba"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Mon Nov 24 15:00:39 2025 +0100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Nov 25 01:57:02 2025 -0800"
      },
      "message": "Do not add .inputdeps paths to --ninja-outputs-file\n\nThis fixes a nasty bug where the content of --ninja-outputs-file\nwould mistakenly include the sources of copy() targets, as well as\nintermediate `.inputdeps` Ninja targets created by the NinjaCopyTargetWriter.\n\nThis only happened when there were more than one generated source\nlisted in the copy() target\u0027s \u0027sources\u0027 argument.\n\nThe CL fixes the issue and adds a unit-test to ensure this does not\nregress in the future.\n\nBug: 448860851\nChange-Id: I195c2cc4b8b0ec5ef3902eaf6d831b220fd3c52c\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/19960\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: David Turner \u003cdigit@google.com\u003e\n"
    },
    {
      "commit": "fb3b73df3c0d2ad7f41ebc91c6905e90dcb518ba",
      "tree": "bfd15e960089a197dccca0852b17c259d73cf1e4",
      "parents": [
        "a156d0b1306b09bf676a72e345ca978ef6093d95"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Tue Nov 04 16:56:42 2025 +1100"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Sun Nov 23 15:40:28 2025 -0800"
      },
      "message": "Make clang modules output -fmodule-file\u003dfoo\u003d\u003cpcm\u003e.\n\n-fmodule-file\u003d\u003cpcm\u003e is deprecated, and it also reads the module files\neagerly instead of lazily.\n\nThis decreases the compile times of an empty file for chrome from 60ms\nto 30ms.\n\nhttps://clang.llvm.org/docs/StandardCPlusPlusModules.html#specifying-bmi-dependencies\nChange-Id: Iac7e4d86c79f75fa4e58c0e9b75f46216a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20380\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "a156d0b1306b09bf676a72e345ca978ef6093d95",
      "tree": "02fb4058ddcb33cd1722b93cf4ff981ec0eef633",
      "parents": [
        "59cb0633f916a2beaa9045ce02cef9fca58366fc"
      ],
      "author": {
        "name": "Junji Watanabe",
        "email": "jwata@google.com",
        "time": "Fri Nov 21 14:53:04 2025 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Nov 21 01:46:00 2025 -0800"
      },
      "message": "infra: Revert CIPD autoconf\n\nIt turned out that using CIPD autoconf doesn\u0027t seem straightforward.\nLet\u0027s just wait for the new image with pre-installed autoconf to be\nrolled out.\n\nNo-Try: true\nBug: 462546993\nChange-Id: I360fbee121eca56a93c1e42257181dd790dffd9d\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20440\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "59cb0633f916a2beaa9045ce02cef9fca58366fc",
      "tree": "01c783b490644fffd8429eb27870984b0ba3bab3",
      "parents": [
        "5ed737c8f560cd03e271c101a821b969afc6e1cb"
      ],
      "author": {
        "name": "Junji Watanabe",
        "email": "jwata@google.com",
        "time": "Fri Nov 21 14:25:09 2025 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Nov 20 21:36:52 2025 -0800"
      },
      "message": "infra: Include autoconf bin directory to PATH\n\nThis CL addresses the following error.\nhttps://logs.chromium.org/logs/gn/buildbucket/cr-buildbucket/8697618079436444433/+/u/jemalloc/autoconf/stdout\n\u003e /b/s/w/ir/x/w/cipd_tool/infra/3pp/tools/autoconf/79821582576f6f08410b2d2f2c0658c2be62aae6ca2df4ab28cc6b4d75002f20/bin/autoconf: 533: exec: autom4te: not found\n\nNo-Try: true\nBug: 462546993\nChange-Id: I854adfe3f49a56515ccece440d54c6e425711b20\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20420\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "5ed737c8f560cd03e271c101a821b969afc6e1cb",
      "tree": "6b7e990b1615656f951997de857422e93fce92d7",
      "parents": [
        "944b383a2812d900e310b5ef859b729d96030c07"
      ],
      "author": {
        "name": "Junji Watanabe",
        "email": "jwata@google.com",
        "time": "Fri Nov 21 14:12:42 2025 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Nov 20 21:13:29 2025 -0800"
      },
      "message": "infra: Fix autoconf executable path\n\nNo-Try: true\nBug: 462546993\nChange-Id: I57efe76d9b71f4a609fecda4dc223351c70d4a9e\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20401\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "944b383a2812d900e310b5ef859b729d96030c07",
      "tree": "4f0e0b33c76b9c2f6b4027987ab6d4497b0d3db1",
      "parents": [
        "c5a0003bcc2ac3f8d128aaffd700def6068e9a76"
      ],
      "author": {
        "name": "Junji Watanabe",
        "email": "jwata@google.com",
        "time": "Fri Nov 21 12:39:01 2025 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Nov 20 19:40:29 2025 -0800"
      },
      "message": "infra: Use CIPD autoconf\n\nautoconf isn\u0027t installed on the Linux bot anymore. This CL installs\nthe CIPD autoconf instead.\n\nNo-Try: true\nBug: 462546993\nChange-Id: I7dd72b35949ea983aa7f15d0ddb0b6d11bcde95a\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20400\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "c5a0003bcc2ac3f8d128aaffd700def6068e9a76",
      "tree": "6f4083d0b83921da5c87c208ee3bba5488f02ef9",
      "parents": [
        "748c9571f3d18820a7989a880d5ddf220e54af1b"
      ],
      "author": {
        "name": "Victor Hugo Vianna Silva",
        "email": "victorvianna@google.com",
        "time": "Sun Nov 16 20:12:41 2025 +0000"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Nov 17 03:34:33 2025 -0800"
      },
      "message": "Allow led access in GN via http://go/ciba\n\nGive access to mdb/chrome-build-access-sphinx. This will help debugging\nthe CI Linux bot breakage. No-Try because the linux bot is busted.\n\nNo-Try: true\nChange-Id: I40fdcffa5beb851fb27284748f813843fc2707dd\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20340\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Victor Vianna \u003cvictorvianna@google.com\u003e\n"
    },
    {
      "commit": "748c9571f3d18820a7989a880d5ddf220e54af1b",
      "tree": "22c3ff73b712e8aa4260cb209a392d47f800139c",
      "parents": [
        "8c77cb940e3f73443dac9e1a1a55c22a9891d67d"
      ],
      "author": {
        "name": "Junji Watanabe",
        "email": "jwata@google.com",
        "time": "Wed Nov 12 20:36:23 2025 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Nov 12 18:18:11 2025 -0800"
      },
      "message": "Revert \"Build non-linkable deps async with Ninja\u0027s validaitons\"\n\nThis reverts commit 90478db6b59b9bebf7ca4cf912d860cf868e724c.\n\nReason for revert: The idea of using validations for data_deps was\nrejected by Chromium and Fuchsia folks.\n\nOriginal change\u0027s description:\n\u003e Build non-linkable deps async with Ninja\u0027s validaitons\n\u003e\n\u003e This CL introduces a build setting flag `async_non_linkable_deps` that\n\u003e write non-linkable deps as Ninja\u0027s `validations` instead of order-only\n\u003e deps.\n\u003e\n\u003e I\u0027ve tested locally that it can build Chromium without errors.\n\u003e Having the feature flag allows me to try the feature in Chromium\u0027s CQ\n\u003e with various build configs on multiple platforms.\n\u003e\n\u003e Bug: 413507213\n\u003e Change-Id: Ic527feebfc64323c5136c83f83264eb577a9560f\n\u003e Reviewed-on: https://gn-review.googlesource.com/c/gn/+/18681\n\u003e Reviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n\u003e Commit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n\nBug: 413507213\nChange-Id: Ia1a31fb1b2ad7a1a28b1d98e954b2df062bfba4a\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20300\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "8c77cb940e3f73443dac9e1a1a55c22a9891d67d",
      "tree": "5e6260d1f61052cb4e7804a8041a70114415a47c",
      "parents": [
        "c4eb7329bf61c276544148febb9a51ede58783ba"
      ],
      "author": {
        "name": "Victor Hugo Vianna Silva",
        "email": "victorvianna@google.com",
        "time": "Sat Nov 08 18:14:35 2025 +0000"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Nov 12 17:33:05 2025 -0800"
      },
      "message": "Upgrade linux bots from ubuntu 22.04 to ubuntu 24.04\n\nThis will only land once more flex bots are migrated to Ubuntu 24,\nper plan outlined below.\nhttps://chrome-internal-review.googlesource.com/c/infradata/config/+/8748036/comment/33bae61d_40b09441/\n\nBug: 459541007\nChange-Id: I1d224dce2f7c0ea4fd1785af12145501c126d33d\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20200\nCommit-Queue: Victor Vianna \u003cvictorvianna@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "c4eb7329bf61c276544148febb9a51ede58783ba",
      "tree": "768ba458d314a5cbd94c9ade078d44adcbc6cd5e",
      "parents": [
        "e7f3202128bdb2429872fdb138626a010b2bff7f"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Wed Nov 12 15:11:07 2025 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Nov 12 00:13:11 2025 -0800"
      },
      "message": "Use unordered_map instead of map in HeaderChecker\n\nAlso use emplace instead of insert to optimize performance.\n\nWith this CL, `gn gen --check` takes 120 seconds.\n\n```\ntikuta-mac:src tikuta$ time ~/ghq/gn.googlesource.com/gn/out/gn.optimized gen --check -C out/UTRmac-rel/\nDone. Made 38392 targets from 4274 files in 119262ms\n\nreal    1m59.941s\nuser    15m7.501s\nsys     0m14.056s\n```\n\nWithout this CL, `gn gen --check` takes 126 seconds.\n\n```\ntikuta-mac:src tikuta$ time ~/ghq/gn.googlesource.com/gn/out/gn gen --check -C out/UTRmac-rel/\nDone. Made 38392 targets from 4274 files in 125567ms\n\nreal    2m6.297s\nuser    16m6.596s\nsys     0m12.044s\n```\n\nContext: https://chat.google.com/room/AAAAqkI-BEQ/g5GWL0SzKBI/g5GWL0SzKBI?cls\u003d10\nChange-Id: Ia8c4596c8301b76a916cb11c18171215d67eab1e\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20260\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: David Turner \u003cdigit@google.com\u003e\n"
    },
    {
      "commit": "e7f3202128bdb2429872fdb138626a010b2bff7f",
      "tree": "118e3032a706e5b2a71edd916f0c9011994d0b96",
      "parents": [
        "20a6b6d6b824e78aa4991e8f06b5a8d52576b993"
      ],
      "author": {
        "name": "Dan Harrington",
        "email": "harringtond@google.com",
        "time": "Fri Nov 07 19:03:54 2025 +0000"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Nov 07 12:54:18 2025 -0800"
      },
      "message": "Add --file_relation to gn refs command\n\nAllows users to filter targets by how they relate\nto the input file.\n\nBug: 458444125\nChange-Id: Icdedf5126b86558794370c5869070a54fa48e3a2\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20180\nCommit-Queue: Dan Harrington \u003charringtond@google.com\u003e\nReviewed-by: Andrew Grieve \u003cagrieve@google.com\u003e\n"
    },
    {
      "commit": "20a6b6d6b824e78aa4991e8f06b5a8d52576b993",
      "tree": "536c5af37f50f0dd594713cb7c06ffeeba64fc37",
      "parents": [
        "a0c5124a50608595a9aadebc4297e854ebd32c53"
      ],
      "author": {
        "name": "Jeffrey Yu",
        "email": "yuje@google.com",
        "time": "Thu Nov 06 10:29:15 2025 -0800"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Nov 07 00:55:53 2025 -0800"
      },
      "message": "Optimize vector initialization and preallocation in desc_builder.cc.\n\nThis change adds `reserve()` calls to preallocate capacity, reducing\npotential reallocations.\n\nChange-Id: I51fdfdbdfaf512c102a36c7af1022c4b57af857f\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20060\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: David Turner \u003cdigit@google.com\u003e\nReviewed-by: David Turner \u003cdigit@google.com\u003e\n"
    },
    {
      "commit": "a0c5124a50608595a9aadebc4297e854ebd32c53",
      "tree": "ac3176757ac5052369ca19b006dfb3b08a7e9b91",
      "parents": [
        "092f4f0d612e5982728c8b872c2e69cf3d04b21f"
      ],
      "author": {
        "name": "Jeffrey Yu",
        "email": "yuje@google.com",
        "time": "Mon Oct 13 10:25:46 2025 -0700"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Nov 05 16:32:58 2025 -0800"
      },
      "message": "Add `reserve` statement when vector size is known beforehand.\n\nChange-Id: If41ad96b8e4ea5461063ca7673e662b099753595\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20041\nCommit-Queue: Jeffrey Yu \u003cyuje@google.com\u003e\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\n"
    },
    {
      "commit": "092f4f0d612e5982728c8b872c2e69cf3d04b21f",
      "tree": "3f890f696a2e544625b501fb2a83b42cdc89ecfd",
      "parents": [
        "07d3c6f4dc290fae5ca6152ebcb37d6815c411ab"
      ],
      "author": {
        "name": "Jeffrey Yu",
        "email": "yuje@google.com",
        "time": "Mon Oct 13 12:04:19 2025 -0700"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 23 10:16:30 2025 -0700"
      },
      "message": "Refactor container update by preferring the range insert.\n\nThe range operation is generally more efficient than inserting within a\nloop, as it avoids having to do a capacity check each loop iteration,\ninstead pre-allocating the necessary block of memory all at once and\nthen doing an optimized batch insert.\n\nChange-Id: I79c5db3075c7afe71e4484e20188307deeb60a4f\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20080\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\nReviewed-by: Jeffrey Yu \u003cyuje@google.com\u003e\nCommit-Queue: Jeffrey Yu \u003cyuje@google.com\u003e\n"
    },
    {
      "commit": "07d3c6f4dc290fae5ca6152ebcb37d6815c411ab",
      "tree": "f0fd64c37289dfd6bdeb193221ac274355799b98",
      "parents": [
        "5ddf42d01f30d9db392aedf2cf7e0f36980c882d"
      ],
      "author": {
        "name": "Aleksei Khoroshilov",
        "email": "akhoroshilov@brave.com",
        "time": "Mon Oct 06 21:09:34 2025 +0700"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 08 04:44:34 2025 -0700"
      },
      "message": "Handle symlinked directories correctly during gn clean on Windows.\n\nPrior to this change, gn clean would recursively delete the contents of\nsymlinked directories on Windows, which could cause data loss when the\nsymlink pointed to important directories outside the out/\u003cdir\u003e.\n\nThis change adds a check for FILE_ATTRIBUTE_REPARSE_POINT to prevent\nrecursive deletion of symlinked directories. Now gn clean will only\nremove the symlink itself while preserving the contents of the target\ndirectory.\n\nChange-Id: If0f4a631de081ad2aa4815db2927df8f80e9bf55\n\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/19980\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nCommit-Queue: Sylvain Defresne \u003csdefresne@chromium.org\u003e\n"
    },
    {
      "commit": "5ddf42d01f30d9db392aedf2cf7e0f36980c882d",
      "tree": "131d6997207bcf51677ac0c28818ad986b640f99",
      "parents": [
        "81b24e01531ecf0eff12ec9359a555ec3944ec4e"
      ],
      "author": {
        "name": "Aleksei Khoroshilov",
        "email": "akhoroshilov@brave.com",
        "time": "Mon Oct 06 21:51:27 2025 +0700"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 07 08:17:14 2025 -0700"
      },
      "message": "Fix relative imports from args.gn.\n\nPreviously, relative imports in args.gn files only worked when GN was\nrun from the output directory containing the args.gn file. This was\nbecause the source directory for args.gn parsing was set to the current\nworking directory rather than the directory containing the args.gn file.\n\nBefore you had to do:\ncd out/dir\ngn gen\n\nNow it works correctly with:\ngn gen out/dir\n\nChange-Id: I98e18a85b03f10353700b523b1f8e06edc4f915e\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/20000\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\n"
    },
    {
      "commit": "81b24e01531ecf0eff12ec9359a555ec3944ec4e",
      "tree": "7cb2889e5e9112b0bd6cdd3f76ee095bbb318c05",
      "parents": [
        "1a7c151c01d09c4704125b6147a579cf3f8c95e9"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Thu Sep 18 13:55:06 2025 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Sep 18 05:59:53 2025 -0700"
      },
      "message": "update reference.md\n\nThis is followup of https://gn-review.googlesource.com/c/gn/+/19820\n\nChange-Id: I11aa2becececdb4561c7eec81edf5a6f8491f5cd\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/19900\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "1a7c151c01d09c4704125b6147a579cf3f8c95e9",
      "tree": "cf4e38e38c180fb94d79fbbde5fc732e0b157b32",
      "parents": [
        "cbb50f2edaadabb5e1809192bd07fb9673039b75"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Wed Sep 17 11:49:49 2025 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 17 06:28:26 2025 -0700"
      },
      "message": "Include -fmodule-file flags in compile_commands.json\n\nThis change updates GN to include the `-fmodule-file` flags for all\nmodule dependencies in the `compile_commands.json` file.\n\nTo achieve this, the module dependency gathering logic has been\nrefactored from `ninja_c_binary_target_writer.cc` into a new, shared\nutility, `ninja_module_writer_util.cc` in\nhttps://gn-review.googlesource.com/c/gn/+/19880 . The\n`compile_commands_writer` now uses this utility to append the correct\nmodule flags to the compilation commands, ensuring that tools have the\ninformation they need to correctly process C++ modules.\n\nBug: 443228626\nChange-Id: I74c2f7c01b3d8f0cd468594a2c8632275382549b\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/19840\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "cbb50f2edaadabb5e1809192bd07fb9673039b75",
      "tree": "d2e24a6475a2625f82c2a4495cad886f0a733479",
      "parents": [
        "9f1c58396d58d04584012dfa1862c535e9acee05"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Tue Sep 16 19:37:06 2025 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 16 19:48:02 2025 -0700"
      },
      "message": "Refactor C++ module dependency logic into a new utility\n\nThis change refactors the C++ module dependency logic out of\nninja_c_binary_target_writer.cc and into a new utility,\nninja_module_writer_util.cc and .h. This consolidation makes the code\ncleaner and prepares it for reuse in other areas, like the\ncompile_commands_writer in\nhttps://gn-review.googlesource.com/c/gn/+/19840\n\nBug: 443228626\nChange-Id: Ide370ddde6baee588aae6e658e0f1cb550fb6e1d\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/19880\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\n"
    },
    {
      "commit": "9f1c58396d58d04584012dfa1862c535e9acee05",
      "tree": "4b3f38bdd9e5c5bf3f878c2404f6e15315f22949",
      "parents": [
        "aa3ecaecac29e23df1ee04e48b41bd274abd50ce"
      ],
      "author": {
        "name": "Richard Wang",
        "email": "richardwa@google.com",
        "time": "Tue Sep 16 00:11:06 2025 -0700"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Sep 16 00:30:30 2025 -0700"
      },
      "message": "Gitiles navigation bar\n\nChange-Id: I739beb6a30a474fe7bd9b8726cb0829172a307a3\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/19860\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "aa3ecaecac29e23df1ee04e48b41bd274abd50ce",
      "tree": "3c6c385a65c4486f9a4616d80a1f0539261ce4f2",
      "parents": [
        "b38dcb6b9f8f020afb89ac66535682b009cdd387"
      ],
      "author": {
        "name": "Andrew Grieve",
        "email": "agrieve@google.com",
        "time": "Fri Sep 12 09:48:23 2025 -0400"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Sep 12 06:58:37 2025 -0700"
      },
      "message": "Adds a len() function\n\nAvoids needing to use a for-each loop to compute list size:\nhttps://source.chromium.org/chromium/chromium/src/+/main:build/config/android/rules.gni;drc\u003d7048ca9df6b3c3a4ea6e34294a0a4e506f1ab569;l\u003d902\n\nI haven\u0027t seen the need for it on strings, but it seems like a thing\nyou\u0027d expect it to work on.\n\nChange-Id: I233c172a7a121e4f364a152282f68011932d9562\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/19820\nCommit-Queue: Andrew Grieve \u003cagrieve@google.com\u003e\nReviewed-by: Dirk Pranke \u003cdpranke@chromium.org\u003e\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\n"
    },
    {
      "commit": "b38dcb6b9f8f020afb89ac66535682b009cdd387",
      "tree": "4369321237362c01502609601678a315053905c1",
      "parents": [
        "5d0a4153b0bcc86c5a23310d5b648a587be3c56d"
      ],
      "author": {
        "name": "Matt Stark",
        "email": "msta@google.com",
        "time": "Mon Aug 11 13:52:20 2025 +1000"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Sep 10 21:44:37 2025 -0700"
      },
      "message": "Avoid clashes of include_dir in rust-project.json.\n\nIn the event of a BUILD.gn file containing multiple crates:\n```\n# path/to/BUILD.gn\nrust_library(\"foo\") {\n  sources \u003d [..., \"//gen/path/to/foo/foo.rs\"]\n}\n\nrust_library(\"bar\") {\n  sources \u003d [..., \"//gen/path/to/bar/bar.rs\"]\n}\n```\n\nIt would previously generate a rust-project.json containing an include\ndir of `gen/path/to`. This means that rust-analyzer thought that foo\ncontains bar.rs and vice versa.\n\nNow we generate the include_dir of `gen/path/to/foo` instead.\n\nChange-Id: Iac4f87c42aa09339ebe01425fed6ed5b39c22747\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/19801\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "5d0a4153b0bcc86c5a23310d5b648a587be3c56d",
      "tree": "0d650ec9c4e05d892c8d7fc99bb334fffb52c47c",
      "parents": [
        "037970ef8d8e5b1d9d3d6defc9aa3886dbfea29a"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Thu Aug 28 17:13:06 2025 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Aug 28 19:52:42 2025 -0700"
      },
      "message": "Check all targets to find duplicated outputs.\n\nCurrently, GN doesn\u0027t find duplicated outputs between different\ntoolchain target. To fix this, I changed to see all_targets_ instead of\ndefault_toolchain_targets_ for duplicated output error.\n\nThis is to fix error in\nhttps://ci.chromium.org/ui/p/chromium/builders/try/ios-catalyst/2510/overview\n\nWith this CL error for the build config changed from\n\n```\nTwo or more targets generate the same output:\n  sdk/xcode_links/MacOSX26.0.sdk/usr/include/DarwinBasic.modulemap\n\nThis is can often be fixed by changing one of the target names, or by\nsetting an output_name on one of them.\n\nCollisions:\n  //buildtools/third_party/libc++:copy_sysroot_modulemaps(//build/toolchain/ios:ios_clang_x64)\n```\nto\n\n```\nTwo or more targets generate the same output:\n  sdk/xcode_links/MacOSX26.0.sdk/usr/include/DarwinBasic.modulemap\n\nThis is can often be fixed by changing one of the target names, or by\nsetting an output_name on one of them.\n\nCollisions:\n  //buildtools/third_party/libc++:copy_sysroot_modulemaps(//build/toolchain/ios:ios_clang_x64)\n  //buildtools/third_party/libc++:copy_sysroot_modulemaps(//build/toolchain/mac:clang_arm64)\n```\n\nChange-Id: I6f95854c54f33c6809afc1cb43715e33f0677555\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/19760\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "037970ef8d8e5b1d9d3d6defc9aa3886dbfea29a",
      "tree": "e76bc8157e2b1ced4826a9f37691408b2dc641f6",
      "parents": [
        "ee5b7e32b961a9da1933e9f46a018ba6cac8ef60"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Mon Aug 25 18:24:02 2025 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Aug 25 06:08:43 2025 -0700"
      },
      "message": "infra/config: Remove luci.recipes.use_python3 experiment\n\nPython3 is used by default in recipes now and this config is not\nnecessary anymore.\n\nBug: 440235171\nChange-Id: Ib1f5816a466dec005cdea55a003c1d22d8528798\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/19740\nReviewed-by: Sylvain Defresne \u003csdefresne@chromium.org\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "ee5b7e32b961a9da1933e9f46a018ba6cac8ef60",
      "tree": "d03fc2c851eff064d0b2920fbc89ae83f8d217c2",
      "parents": [
        "c15bfa41e5266dcce4161968ab4eb0387cae7a7a"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Wed Aug 13 00:56:09 2025 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Aug 12 18:18:54 2025 -0700"
      },
      "message": "Handle empty outputs in WriteInputDepsStampOrPhonyAndGetDep\n\nThis is to fix\nhttps://ci.chromium.org/ui/p/chromium/builders/try/ios-simulator/2437645/overview\n\nBug: 40440396\nChange-Id: Idaafb33451adb3221ec1d18f76c3c8ebe086e3e1\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/19700\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "c15bfa41e5266dcce4161968ab4eb0387cae7a7a",
      "tree": "34b38f1c41aa470fed5439792a39d1dcda6c536a",
      "parents": [
        "4ce861fc06ec87ff74eb6a17ebbd55e4755ebdeb"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@google.com",
        "time": "Fri Aug 08 16:23:58 2025 +0900"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Aug 11 18:02:34 2025 -0700"
      },
      "message": "build: Propagate module dependencies through group targets\n\nThis change ensures that C++ module dependencies are correctly\npropagated through `group` targets when using `public_deps`. Previously,\n`group` targets were not considered in\n`ComputeModuleDepsInformationFor`, leading to incomplete dependency\nresolution.\n\nA new unit test has been added to verify this functionality.\n\nThis is to remove `alias` template in\nhttps://source.chromium.org/chromium/chromium/src/+/main:buildtools/third_party/libc++/modules.gni;l\u003d79;drc\u003d3296f9068c5d6ac4ac42124ee2338dc36443df8b\n\nBug: 40440396\nChange-Id: Ibb2e62af1a43df1223275176c8b204b0c359f299\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/19680\nReviewed-by: David Turner \u003cdigit@google.com\u003e\nReviewed-by: Matt Stark \u003cmsta@google.com\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@google.com\u003e\n"
    },
    {
      "commit": "4ce861fc06ec87ff74eb6a17ebbd55e4755ebdeb",
      "tree": "7690289a57ed75fa8737b52cd3ef83c0f331948b",
      "parents": [
        "cc7c61e105fb56183fd6c5c52bbe3c37ff724a0d"
      ],
      "author": {
        "name": "Sylvain Defresne",
        "email": "sdefresne@chromium.org",
        "time": "Fri Aug 08 11:24:02 2025 +0200"
      },
      "committer": {
        "name": "GN LUCI",
        "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Aug 08 02:35:12 2025 -0700"
      },
      "message": "Deduplicate item in \u0027deps\u0027, \u0027sources\u0027 and related lists\n\nWhen sorting \u0027deps\u0027, \u0027sources\u0027 and related lists, also remove any\nduplicated items (this can be inhibited by using a \"# KEEPDUPS\"\ncomment before the list).\n\nAlso fix the sorting of accessor nodes (they were ignoring the\nmember or subscript part when comparing them).\n\nFixed: 42440318\nChange-Id: I99aae1c2dc2008c21423464e0744792ada96732c\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/19660\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\nCommit-Queue: Sylvain Defresne \u003csdefresne@chromium.org\u003e\n"
    }
  ],
  "next": "cc7c61e105fb56183fd6c5c52bbe3c37ff724a0d"
}
