)]}'
{
  "log": [
    {
      "commit": "3025be9c477069426f08b8235e9545d5b20afd0f",
      "tree": "bb726b2a87a66057a302cf0eb5f6d6c75fc6aa29",
      "parents": [
        "7115c811fe81ead9fb42a9c0fbdb13de4fcc25cf"
      ],
      "author": {
        "name": "Richard Wang",
        "email": "richardwa@google.com",
        "time": "Fri Nov 13 05:45:30 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Nov 13 05:45:30 2026"
      },
      "message": "infra: add rawstring analyzer\n\nAdd an analyzer that reports interpreted string literals holding\nmulti-line text, which are easier to read as raw string literals, e.g.\nshell scripts, ninja manifests and help text.\n\nTo keep noise low, it only reports literals with at least 3 lines of\ncontent, where blank lines, lines that are only printf verbs, and bare\n\"label:\" lines don\u0027t count. It skips literals that a raw string can\u0027t\nexpress faithfully (backquotes, \\r, \\t, other non-printable runes, or\ntrailing spaces that editors would strip) and generated files.\n\nSupports opt-out via `//goanalyzer:ignore rawstring` on the same or\npreceding line.\n\nBug: 584489882\nChange-Id: I9cbc752f07490e46f98eae2043149fdf6a6a6964\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8791275\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Richard Wang \u003crichardwa@google.com\u003e\n"
    },
    {
      "commit": "7115c811fe81ead9fb42a9c0fbdb13de4fcc25cf",
      "tree": "49e3b923a270f3d552a5c94d65c47de4fc56a5fd",
      "parents": [
        "e6c63c8c96dcff073732a9157855a97e2ed2a578"
      ],
      "author": {
        "name": "Richard Wang",
        "email": "richardwa@google.com",
        "time": "Fri Nov 13 05:45:24 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Nov 13 05:45:24 2026"
      },
      "message": "infra: rename subtestanalyzer to goanalyzers\n\nTurn the subtest name vettool into a multichecker so that more analyzers\ncan be added to it without building another vettool and type-checking\nevery package again. The subtest name analyzer moves into its own\npackage, and the presubmit selects it with -subtestnames.\n\nNo change in behavior.\n\nBug: 584489882\nChange-Id: If8310e6d04a3c59b12c6d592ec3f42716a6a6964\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8791274\nCommit-Queue: Richard Wang \u003crichardwa@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "e6c63c8c96dcff073732a9157855a97e2ed2a578",
      "tree": "6eb5b5994858ab3d70943d9912696f70660d610d",
      "parents": [
        "7fd4842a0b4f4d62486d6c17e1407a0c3321d4e0"
      ],
      "author": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Fri Nov 13 03:05:05 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Nov 13 03:05:05 2026"
      },
      "message": "hashfs: record entry kind; persist mtime-only files\n\nA clean chrome build stats ~92k files it never reads. Without a digest\nthey were saved only in missing_digests (a digestless Entry loads as a\ndirectory), so the next load hashed all of them and the first no-op\nafter a clean build was never clean. With -fs_defer_digest it never\nconverged.\n\nAdd Entry.kind (file/dir/symlink) to every saved entry, and Entry.size\nfor files without digest. hashfs.EntryKind reads the kind and falls\nback to the old inference for states from older siso; the loader, the\nWatchman FileInfo and `siso fs flush` use it. Files without digest are\nsaved in Entries with mtime, size and is_executable, checked by mtime,\ntype and size on load, and hashed lazily. Older siso loads them as\ndirectories, finds files on disk and treats the state as dirty.\n\nNo-op after a clean chrome build (autoninja -strict_remote -fast_nop),\nwall / user CPU; #2+ is the median of the following runs:\n                  before                 after\n  default   #1    5.25s / 50.9s (dirty)  1.56s / 6.3s\n            #2+   1.48s /  5.9s          1.50s / 6.2s\n  defer     #1    3.93s / 39.9s (dirty)  1.46s / 6.1s\n            #2+   4.33s / 42.7s (dirty)  1.65s / 6.0s\n  watchman  #1    5.22s / 49.1s (dirty)  1.23s / 6.8s\n            #2+   1.04s /  6.8s          0.98s / 5.7s\nPeak RSS of the first no-op drops from 3.7 GB to 1.3 GB.\n\nChange-Id: Ie5965523d80b1bda6b9cee7b801477cc6bc81449\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8040828\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\nCommit-Queue: Neri Marschik \u003cnerima@google.com\u003e\n"
    },
    {
      "commit": "7fd4842a0b4f4d62486d6c17e1407a0c3321d4e0",
      "tree": "cecb979ae1e05eaffb80f9996cc7b1e6f486b783",
      "parents": [
        "259b14a57b7ead47a6125326ac81131e4b7c50e1"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Fri Nov 13 01:02:36 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Nov 13 01:02:36 2026"
      },
      "message": "siso: accept the committed size of compressed uploads\n\nREAPI defines the committed_size of a compressed upload only for one\nthat the server ends early, as -1. For one that completes, servers\ndiffer: Buildbarn, BuildBuddy, bazel-remote and NativeLink report the\ncompressed bytes they received, RBE the uncompressed size, and\nBuildfarm -1. bytestreamio\u0027s Writer accepted only the uncompressed\nsize, or -1 after the server had ended the stream during a Write, and\nfailed every compressed upload to any server but RBE. FindMissingBlobs\nin the upload\u0027s caller hid the failure, as the blob was stored anyway.\n\nAccept -1 for any compressed upload, and the compressed bytes sent for\none that the server didn\u0027t end early.\n\nChange-Id: I51c19176c1d1e4158bb73e1323cc774df8bace29\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8773230\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "259b14a57b7ead47a6125326ac81131e4b7c50e1",
      "tree": "fe8a3aba7ddb6abcb1756e7359c53130853a5164",
      "parents": [
        "db7b5ec26d0698bfa1f537d10fa43621ebbccaca"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Thu Nov 12 12:10:17 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Nov 12 12:10:17 2026"
      },
      "message": "siso: fix dangling symlink support\n\nhashfs.Entries would not preserve dangling symlinks or escaping\nsymlinks.\nuse hashfs.RawEntries for dirOutputTree to preseve symlinks.\n\nBug: b/584976936\nChange-Id: Ifd9d80d0a84c012561d97d12828c1057d0d9f517\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8795072\nCommit-Queue: Neri Marschik \u003cnerima@google.com\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nReviewed-by: Neri Marschik \u003cnerima@google.com\u003e\n"
    },
    {
      "commit": "db7b5ec26d0698bfa1f537d10fa43621ebbccaca",
      "tree": "d8f06527a4a6e4fc82ca02b10d29b67251e82a17",
      "parents": [
        "83f115a2d2fcaef005ebd768792fe0fdc5e09966"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Thu Nov 12 10:25:01 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Nov 12 10:25:01 2026"
      },
      "message": "siso: fix exit\u003d-1 to report signal number as bash\n\nfollowup of https://crrev.com/c/8700837\n\nChange-Id: I3c006c630d4f12fab9760b7c22e67f573edb492f\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8791956\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "83f115a2d2fcaef005ebd768792fe0fdc5e09966",
      "tree": "69ff5e2ecde00cf6db867f7d09c2ea590b070a3b",
      "parents": [
        "591bd56fda361fbe3c100edc303119752b8fd834"
      ],
      "author": {
        "name": "Alex Ovsienko",
        "email": "ovsienko@google.com",
        "time": "Thu Nov 12 08:28:44 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Nov 12 08:28:44 2026"
      },
      "message": "siso: cap Windows ForkSema at 64\n\nAfter crrev.com/c/8681304 raised runtime.GOMAXPROCS(0) from 64 to 192\nacross Windows processor groups, localexec.ForkSema scaled from 64 to\n192. On 192-vCPU win-build-service, that re-triggered Windows\nERROR_NOT_ENOUGH_MEMORY (\"Not enough memory resources are available to\nprocess this command\", b/278658064) in 8/53 builds (vs 0/1,429 before).\n\nKeep GOMAXPROCS and build limits scaling across all processor groups,\nand cap localexec.ForkSema at 64 on Windows via concurrencyLimit.\n\nORIGINAL_AUTHOR\u003dovsienko\nBug: 466257630\nChange-Id: I3839dec7443f63d6ee0b9c17ce8548f1878fe595\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8795070\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Alex Ovsienko \u003covsienko@google.com\u003e\n"
    },
    {
      "commit": "591bd56fda361fbe3c100edc303119752b8fd834",
      "tree": "996e5517f920a9a27e107f3b13f0c7bab430f628",
      "parents": [
        "c8428e91cbddaa68961c6d3e2c15e073359e734d"
      ],
      "author": {
        "name": "Ryosuke Miyake",
        "email": "rysk@google.com",
        "time": "Thu Nov 12 07:40:19 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Nov 12 07:40:19 2026"
      },
      "message": "Document why inputWalker uses bitmaps\n\nExplain why the wanted and reached sets of inputWalker are bitmaps\nindexed by node id rather than maps.\n\nBug: 578308343\nChange-Id: I8fd79ecc05155c294ef6a488c0861cc909a8df3a\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8792981\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Ryosuke Miyake \u003crysk@google.com\u003e\n"
    },
    {
      "commit": "c8428e91cbddaa68961c6d3e2c15e073359e734d",
      "tree": "9bd5772dacd0dbadb94a0e71fd8c7a3bc99efbd8",
      "parents": [
        "5a74877fda504fa9649bfa69bea3c71d8feb543b"
      ],
      "author": {
        "name": "Ryosuke Miyake",
        "email": "rysk@google.com",
        "time": "Thu Nov 12 07:27:23 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Nov 12 07:27:23 2026"
      },
      "message": "Index CheckMissingDeps by node id\n\nCheckMissingDeps tracked wanted deps and seen nodes in maps keyed by\npath, so it built and hashed a path for every node it visited (~29k per\nchecked step on a linux out/Default graph).\n\nResolve the deps to graph nodes before the walk, and track wanted and\nreached nodes in pooled bitmaps indexed by node id. A dep that is not a\nnode in build.ninja is now reported missing; before, it was compared\nwith the paths of the nodes reached, which only differs when build.ninja\nspells a path uncleanly (e.g. gen/./x.h).\n\nlinux-build-perf-siso, \"with missing-deps check\" step:\n- overhead over the build without the check: +196 s -\u003e +29 s\n- CheckMissingDeps CPU: 1416 s -\u003e 143 s\n- before: https://ci.chromium.org/b/8665419141896722289\n- after:  https://ci.chromium.org/b/8665419141062650273\n\nBug: 578308343\nChange-Id: Ic379c10a1ce4d67d97ff6ce4d249914aa448a02e\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8680778\nCommit-Queue: Ryosuke Miyake \u003crysk@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "5a74877fda504fa9649bfa69bea3c71d8feb543b",
      "tree": "20218c73905c36f2edd2e45d320dda98a3ea9318",
      "parents": [
        "77efcd2fe93bc62631e91a0c7d266f60892e0be4"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Thu Nov 12 05:09:35 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Nov 12 05:09:35 2026"
      },
      "message": "upgraded github.com/klauspost/compress v1.20.3 \u003d\u003e v1.20.4\n\nhttps://github.com/klauspost/compress/releases/tag/v1.20.4\n\nChange-Id: Ic13e4ef0d8d2b38c7935f7c57efd39cf8f6da8bc\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8795068\nCommit-Queue: Fumitoshi Ukai \u003cukai@google.com\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Richard Wang \u003crichardwa@google.com\u003e\nReviewed-by: Richard Wang \u003crichardwa@google.com\u003e\n"
    },
    {
      "commit": "77efcd2fe93bc62631e91a0c7d266f60892e0be4",
      "tree": "b58fbebecdb0d76dbecf40fd28dd9d0a68ce4e3d",
      "parents": [
        "6c86192533ef7ea4e3abf4ee0b307563a0da7203"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Thu Nov 12 03:45:41 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Nov 12 03:45:41 2026"
      },
      "message": "use standard uuid package\n\ngo 1.27 adds uuid in standard package.\nreplace github.com/google/uuid to standard uuid.\n\nChange-Id: I4c20511c7b2d0baf0287470eb720b2211ac56d6f\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8800353\nReviewed-by: Richard Wang \u003crichardwa@google.com\u003e\nCommit-Queue: Richard Wang \u003crichardwa@google.com\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "6c86192533ef7ea4e3abf4ee0b307563a0da7203",
      "tree": "71985e0f19e5461ec545771200f0ab53bd667c20",
      "parents": [
        "80e56c3d3a987d0680d9765d357ecd08da5350f0"
      ],
      "author": {
        "name": "Ryosuke Miyake",
        "email": "rysk@google.com",
        "time": "Wed Nov 11 09:08:26 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Nov 11 09:08:26 2026"
      },
      "message": "Move CheckMissingDeps to missing_deps.go\n\nMove CheckMissingDeps and resolveEdgeDeps from step_def.go to a new\nfile, missing_deps.go, without changes, so that the follow-up\ncrrev.com/c/8680778 can rewrite them in their own file.\n\nBug: 578308343\nChange-Id: Ia68a281d92f2a72411004a01ad6b59d8f69748ba\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8791955\nCommit-Queue: Ryosuke Miyake \u003crysk@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "80e56c3d3a987d0680d9765d357ecd08da5350f0",
      "tree": "d9c292143f3fc87c2e92d5619b6a98a62ebbd695",
      "parents": [
        "0fa8a652783ddcd21018c8be6b80c5a1c63b6e3b"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Wed Nov 11 07:31:18 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Nov 11 07:31:18 2026"
      },
      "message": "siso: report signal in exit code as bash\n\nbash encode signal number encoded in exit code as 128+signal,\nand exitCodeExplain supports this.\nhowever, it is not in kernel, so native command exit code doesn\u0027t\nuse such convention.\nGo\u0027s ExitCode would return -1 when process was not Exited but\nterminated by Signal.\ne.g.\nhttps://ci.chromium.org/ui/p/chromium/builders/build/ios-build-perf-siso/34782/overview\n```\n../../third_party/cpython3/host/bin/python3 ../../tools/grit/pak_util.py repack ios_clang_arm64_app_ext/gen/ios/chrome/widget_kit_extension/fr.lproj/locale.pak ios_clang_arm64_app_ext/gen/ios/widget_kit_extension/ios_widget_kit_extension_strings_fr.pak\nexit\u003d-1\nerror: 1 steps failed: exit\u003d-1\n```\n\nTo make it easy to diagnose the exit reason, use the same\nexit code encoding as bash.\n\nChange-Id: I2aab65862d669131295ab0cf78c6a1757ac1a11b\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8700837\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "0fa8a652783ddcd21018c8be6b80c5a1c63b6e3b",
      "tree": "4e5ea21c532017e27d24d9268e33126255ffa1e0",
      "parents": [
        "78cbbcc0225d8b3704bef7927ad9c7a7979b906d"
      ],
      "author": {
        "name": "Alex Ovsienko",
        "email": "ovsienko@google.com",
        "time": "Wed Nov 11 06:39:16 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Nov 11 06:39:16 2026"
      },
      "message": "siso: count all Windows processor groups in GOMAXPROCS at init\n\nOn Windows systems with multiple processor groups, Go\u0027s default\nGOMAXPROCS counts only the process\u0027s primary group\n(https://go.dev/issue/6296), capping Siso\u0027s Go scheduler and concurrency\npools at \u003c\u003d64 CPUs. Add an init-only siso/runtimex package (imported by\nsiso/sync/semaphore) that sets runtime.GOMAXPROCS using the multi-group\ngetCPUCount logic from https://go.dev/cl/857241 when GOMAXPROCS is not\nset in the environment.\n\nBug: 577862707\nChange-Id: I7fb165a2c38d0b4394f9ab78d2bb5d41c9227500\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8681304\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\nCommit-Queue: Alex Ovsienko \u003covsienko@google.com\u003e\n"
    },
    {
      "commit": "78cbbcc0225d8b3704bef7927ad9c7a7979b906d",
      "tree": "fd70919eeb20f26bdc56a68f3f7f6f7455abacc1",
      "parents": [
        "5b876ad4f36bfc993491efdea5843738f17a613f"
      ],
      "author": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Wed Nov 11 06:13:58 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Nov 11 06:13:58 2026"
      },
      "message": "o11y/trace: hold wmu in Tracer.Close to avoid racing direct writes\n\nTracer.Stop drains the async event loop, but direct Tracer.write\ncallers (Begin/End, Process, Thread, ProcessSortIndex) write under\nTracer.wmu without going through the event channel. When a fast-nop\nbuild exits early while a detached goroutine (such as\nhashfs.SetState.store) is still writing trace events, Tracer.Close\ncould race Tracer.write on bufio.Writer and te.f.\n\nHold te.wmu across writing the trace footer, flushing, and closing the\nunderlying file, clear te.f, and redirect te.w to io.Discard afterwards\nso late writes and repeated Close calls become harmless no-ops.\n\nChange-Id: I3ad513d2000a4985d19916b5fa075354826de83c\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8773169\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "5b876ad4f36bfc993491efdea5843738f17a613f",
      "tree": "aee566507e03d056c72535f94ad6c0b704b4bbf3",
      "parents": [
        "99bc4a4245496c2b3bfdc42396edb01396061fc6"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Wed Nov 11 05:48:22 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Nov 11 05:48:22 2026"
      },
      "message": "siso: enable --reapi_walkdir_stream true by default.\n\nFor WalkDir, ReadBatchBlobs could eliminate duplicated\ndirectory message fetching, but it would need to fetch\neach directory level by one grpc call, so it requires\nmany grpc call for deep directories and take time\ndue to RTT.\nIt would be better to use GetTree streaming by default.\n\nBug: b/584357256\nChange-Id: I1217f0677f5aa0e4816083944cca9c32effa926b\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8792973\nCommit-Queue: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "99bc4a4245496c2b3bfdc42396edb01396061fc6",
      "tree": "8f81eaa719cdde4579b39c3992795f9b9426011b",
      "parents": [
        "693ee607db841cf42b35c3aa94ece0e08e0b2be9"
      ],
      "author": {
        "name": "Richard Wang",
        "email": "richardwa@google.com",
        "time": "Wed Nov 11 04:53:51 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Nov 11 04:53:51 2026"
      },
      "message": "Use raw string literals for multi-line strings\n\nBug: 584489882\nChange-Id: I4acf71d94b4bd86c6c50a9518f9049436a6a6964\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8791273\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Richard Wang \u003crichardwa@google.com\u003e\n"
    },
    {
      "commit": "693ee607db841cf42b35c3aa94ece0e08e0b2be9",
      "tree": "fc5b1c4c137cf76cbaa1a262b3e032aeb188a1d1",
      "parents": [
        "b106904d2e338d2164e3c3029a00d0fb04d17e74"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Wed Nov 11 03:29:03 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Nov 11 03:29:03 2026"
      },
      "message": "siso: set PageSize for ListActions\n\nIf we don\u0027t set PageSize in ListActions request,\nRBE may collect many candidates and it would take time.\nSince siso only checks 10 candidates, pass 10 as PageSize\nto reduce load of RBE.\n\nBug: b/584357256\nChange-Id: I776b2e69b6b14e3065dfed4fef4f9f7a5a59bc14\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8790635\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "b106904d2e338d2164e3c3029a00d0fb04d17e74",
      "tree": "6ecfd5e5acce85b7d322e6f44b44e932f1908e29",
      "parents": [
        "c8c55e92472d6bb65d03fa859042c8e3632654a9"
      ],
      "author": {
        "name": "gregorynisbet",
        "email": "gregorynisbet@google.com",
        "time": "Wed Nov 11 00:35:34 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Nov 11 00:35:34 2026"
      },
      "message": "[go] update toolchain go 1.27.3 -\u003e 1.27.4\n\nUpdate Go toolchain pin in PRESUBMIT.py and go directives in all\nfirst-party go.mod files from 1.27.3 to 1.27.4.\n\nBug: b:549514843\nChange-Id: I5059069329969af01eb37d8b128c5f0162cda31d\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8785140\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Gregory Nisbet \u003cgregorynisbet@google.com\u003e\n"
    },
    {
      "commit": "c8c55e92472d6bb65d03fa859042c8e3632654a9",
      "tree": "46f67ea64539612599ecdaad72ce72def5735495",
      "parents": [
        "69ce46e56275716e8525ad8444e11b9b413b4ffa"
      ],
      "author": {
        "name": "Zi Wang",
        "email": "mrziwang@google.com",
        "time": "Wed Nov 11 00:14:15 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Nov 11 00:14:15 2026"
      },
      "message": "siso: deduplicate and resolve symlink dirs in nsjail inputs\n\nWhen nsjail action sandboxing mounts inputs in nsjailutil.New, duplicate\nsymlinks or inputs nested under a symlinked directory (such as Android\u0027s\nframeworks/native/include/gui -\u003e ../libs/gui/include/gui alongside\nframeworks/native/include/gui/AdditionalOptions.h) cause nsjail to fail\nwith EEXIST or ENOENT during mount setup.\n\nAdd ExpandInputs on hashfs.FileSystem and call it on the caller side\n(build and subcmd/sandbox) to expand intermediate symlink directories\nvia ExpandSymlinks(filepath.Dir(input)) and relocate nested inputs to\ntheir resolved parent directories.\n\nUpdate nsjailutil.New via resolveInputs (using only io/fs) to:\n- Clean and deduplicate exact duplicate input paths.\n- Omit child mounts that are already shadowed by a bind-mounted parent\n  directory.\n- Reject inputs nested under a symlink mount.\n\nBug: b/579246632\nTest: go test ./hashfs/... ./toolsupport/nsjailutil/... ./build/... ./subcmd/sandbox/...\nChange-Id: I32ca417e9d0d7c0d8855402a79877ca4cd3a5e54\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8681989\nCommit-Queue: Zi Wang \u003cmrziwang@google.com\u003e\nReviewed-by: Cole Faust \u003ccolefaust@google.com\u003e\n"
    },
    {
      "commit": "69ce46e56275716e8525ad8444e11b9b413b4ffa",
      "tree": "f2e261ec520b50eb561a00f81e90ea525e105f0d",
      "parents": [
        "7478ae02d852486e7ea3e02c2c7e6674f9aa4e80"
      ],
      "author": {
        "name": "Ryosuke Miyake",
        "email": "rysk@google.com",
        "time": "Tue Nov 10 11:09:30 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Nov 10 11:09:30 2026"
      },
      "message": "Consume the CheckMissingDeps queue by index\n\nCheckMissingDeps popped the front of its BFS queue with\ncopy(edges, edges[1:]), which shifts the whole queue on every pop.\n\nWalk the queue by index instead. The edges visited and the result are\nunchanged.\n\nOn linux-build-perf-siso (led), the overhead of -missing_deps\u003derror\nover the same clean build without the check went from +485 s to +282 s.\nBefore: https://ci.chromium.org/b/8665599358664356481\nAfter: https://ci.chromium.org/b/8665599357864693057\n\nSplit from crrev.com/c/8680778.\n\nBug: 578308343\nChange-Id: I104a70e85322f65a5fdacca9fdc27bb17a2087d4\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8773049\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Ryosuke Miyake \u003crysk@google.com\u003e\n"
    },
    {
      "commit": "7478ae02d852486e7ea3e02c2c7e6674f9aa4e80",
      "tree": "f2d49741f2ecb8cbde271e9163861c2ae17e5c34",
      "parents": [
        "ec7b519aab61fc805c96fb0ab34cc0a8336d2e8b"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Tue Nov 10 05:50:15 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Nov 10 05:50:15 2026"
      },
      "message": "siso: fix slab.slice tail fragmentation and pack Edge nodes\n\nslab.slice previously returned make([]T, n) when s.next+n exceeded\nlen(s.allocs) without advancing s.next or allocating a fresh slab,\ncausing subsequent multi-element slice requests to fall back to\nindividual heap allocations until a 1-element request happened to\nfinish the slab. In addition, ch.edgePathSlab was sized for 1 node per\nbuild edge (ch.nbuild), and Edge stored outputs, inputs, and\nvalidations in 3 separate []*Node slice headers with int counts (176 B\nper Edge).\n\nTrack slab usage via len(s.allocs) and capacity via cap(s.allocs),\nallocating a new backing slice when len(s.allocs)+n \u003e cap(s.allocs),\nsize edgePathSlab to ch.nbuild*4, and pack outputs, inputs, and\nvalidations into a single contiguous Edge.nodes slice with uint32\ncounts (shrinking Edge from 176 B to 128 B).\n\nBenchmarkLoadAndroid (7.12M nodes), 128-CPU host, 3 runs:\n  sec/op     5.499    -\u003e 5.408     (-1.6%)\n  B/op       15.99Gi  -\u003e 15.88Gi   (-0.7%)\n  allocs/op  8.56M    -\u003e 8.40M     (-1.8%)\n\nBenchmarkLoadChromium, 128-CPU host, 6 runs:\n  sec/op     0.664    -\u003e 0.672     (+1.2%)\n  B/op       889.8Mi  -\u003e 868.6Mi   (-2.4%)\n  allocs/op  1.693M   -\u003e 1.622M    (-4.2%)\n\nBug: b/577510209\nChange-Id: I5cc5426955e1cb91c05115d9fdacbf4e7b20c528\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8683423\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "ec7b519aab61fc805c96fb0ab34cc0a8336d2e8b",
      "tree": "77e4d9990ef80bd27992b9e43d14d3d5fd086c75",
      "parents": [
        "18eb85d0bd390dfb2f05a802b91c9082c68ba98d"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Tue Nov 10 05:45:51 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Nov 10 05:45:51 2026"
      },
      "message": "siso: fix path incompatible between in memory hashfs vs journal\n\nhfs.directory.store will traverse intermediate symlink,\nand stores the entry in resolved filename.\nhowever, it didn\u0027t return resolved filename, and use\noriginal filename for journal.\nWhen recovering from journal, unresolved path is used\nand siso failed to reconcile, and would cause strange error\nin incremental build.\n\nUse resolved path in journal too to avoid such inconsistency.\n\nBug: b/577452831\nChange-Id: I4820bdee3d4087b1c6b56dc44e76f0093df42cec\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8682482\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "18eb85d0bd390dfb2f05a802b91c9082c68ba98d",
      "tree": "822237296d8b628ee0287fd491c1033c8c651af9",
      "parents": [
        "36660cc8cbab3e310aa304f4bf1491a5f81a5a0e"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Mon Nov 09 15:55:52 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Nov 09 15:55:52 2026"
      },
      "message": "siso: fail WalkDir when GetTree leaves out part of the tree\n\nREAPI lets GetTree succeed without the subtrees that are missing from\nthe CAS, and several servers do that. With -reapi_walkdir_stream,\nWalkDir then walked the rest of the tree and returned nil, so a caller\nsuch as the two phase cache lookup saw an incomplete input tree. Fail\nwhen a directory that the tree refers to never arrived.\n\nChange-Id: I68be475facd77d5baa0a69484ffbc7c1ae48a8b1\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8773168\nAuto-Submit: Philipp Wollermann \u003cphilwo@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "36660cc8cbab3e310aa304f4bf1491a5f81a5a0e",
      "tree": "c03bbd96ec39c42561c2a690d9a83b1be2a93d65",
      "parents": [
        "0a46eeb938c7bc566dc94d67af1f10aa03fda037"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Mon Nov 09 15:46:00 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Nov 09 15:46:00 2026"
      },
      "message": "siso: finish an upload that the server ended early\n\nA server ends a ByteStream Write as soon as another upload of the same\nblob completes. If that happened after the last Write, Close got io.EOF\nfrom sending finish_write and failed the upload, although the response\nthat CloseAndRecv gets reports success.\n\nOn io.EOF from finish_write, receive the response as usual.\n\nChange-Id: Ie6d9e4e801d5d62c497105fb9b3a73d18d2244b7\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8773231\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "0a46eeb938c7bc566dc94d67af1f10aa03fda037",
      "tree": "8d3e70e851f6b52ca5589fd0ab1c15a7900592da",
      "parents": [
        "c3b52e03841024a473a77cedb2700934ffb4c84a"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Mon Nov 09 15:45:54 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Nov 09 15:45:54 2026"
      },
      "message": "siso: don\u0027t write a chunk that another fetch has cached\n\nfetchChunks checks the local cache for a large chunk before it reads\nthe chunk with ByteStream, but another fetch of the same chunk can store\nit in between. ContentSink then returns no writer, as the content\nexists, and io.Copy to that nil writer panicked. A two-phase caching\ntest hit this about once in 20 runs once its fake server offered\nSplitBlob.\n\nReturn when another fetch has cached the chunk, as the other callers\nof ContentSink do. That return, like the error returns before it, left\nthe ByteStream read open until the caller\u0027s context ended, since\nbytestreamio.Reader can\u0027t end it, so cancel the read on every return.\n\nChange-Id: I73ecdc75d4311a52095d855611d608741dcb6d73\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8773229\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "c3b52e03841024a473a77cedb2700934ffb4c84a",
      "tree": "7c769067b74e87b1126790857decf9ccebf631eb",
      "parents": [
        "3e434e25d38c870cc95980aad074d2b4750341eb"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Mon Nov 09 15:42:36 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Nov 09 15:42:36 2026"
      },
      "message": "siso: mount the nsjail exec root as a tmpfs\n\nThe exec root in the jail was a read-only bind of a directory in the\njail dir, so nsjail created the mount points for the inputs in that\ndirectory on the host. nsjail writing into the source of a read-only\nbind is a bug, and an nsjail with a fix for it (branch mnt-fixes of\ngithub.com/philwo/nsjail, not upstream yet) refuses to create those\nmount points and fails every action that has inputs.\n\nUsing a tmpfs also makes each action cheaper: the mount points now live\nin memory instead of on the jail dir\u0027s file system, and Siso no longer\ndeletes them after the action. Measured with nsjail 3.6 on XFS on a\nRyzen 9 9950X3D, running /bin/true with 3185 Chromium headers as inputs:\n\n                                         before     after\n  one jail at a time:\n    nsjail run                           50.5 ms    40.9 ms\n    removing the jail dir                13.7 ms    0.06 ms\n  32 jails at once, run and removal:\n    wall time per jail                   440 ms     409 ms\n    CPU time per jail                    206 ms     191 ms\n\nChange-Id: Ib0362f88583e0c3d3362d84c460e916f26a90001\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8773147\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nAuto-Submit: Philipp Wollermann \u003cphilwo@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "3e434e25d38c870cc95980aad074d2b4750341eb",
      "tree": "9eb425852405a2e1f31f2aecf067793d14bcee29",
      "parents": [
        "9b1904db44f696f1c5336fa1170d29a8e220d520"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Mon Nov 09 15:14:57 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Nov 09 15:14:57 2026"
      },
      "message": "siso: fix Landlock executor tests in checkouts under /tmp\n\nTestLandlockExecutor_OutputDirs and _DefaultDirs failed when the\ncheckout was under /tmp, such as a worktree in a scratch directory.\nMost cases left WorkspaceRoot empty, which no real build does, so their\npaths resolved against the working directory, and the executor\ndeliberately withholds /tmp when /tmp contains the workspace root. Give\nevery case an absolute workspace root outside /tmp.\n\nChange-Id: I77170f34b38d1380ec1afcd72461d7289cbc604d\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8773228\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "9b1904db44f696f1c5336fa1170d29a8e220d520",
      "tree": "84d4f1be1ca331d9f5a93b2e9d54b53337a0982e",
      "parents": [
        "64381a57dadb85ca420fb47a9d059b93d3fdba51"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Mon Nov 09 15:14:11 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Nov 09 15:14:11 2026"
      },
      "message": "siso: drop the No-Without-Go-Work footer from the docs\n\nThe buildinfra recipe no longer reads the footer and tests each module\nonly without go.work, because a CL with an incompatible kajiya API\nchange can\u0027t pass both the workspace and the non-workspace build.\nDescribe landing such a change as a kajiya CL followed by a siso CL\nthat bumps the kajiya dependency.\n\nChange-Id: I7c83f2b615e66806d6b887e2f2957ba97bf0b590\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8773227\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "64381a57dadb85ca420fb47a9d059b93d3fdba51",
      "tree": "0c1b335b7ec24a048c4df31b7ae4a1ed36fdcc8f",
      "parents": [
        "59d84e3b054313652b74928f5a9c550f4a951723"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Mon Nov 09 02:08:39 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Nov 09 02:08:39 2026"
      },
      "message": "siso: update version string to v1.6.10\n\nv1.6.9 is rolled out as pinned version at\ngit_revision:59d84e3b054313652b74928f5a9c550f4a951723\nhttps://crrev.com/c/8771407\nhttp://ag/43636875\n\nBug: b/580667103\nChange-Id: I8a12835aa0b748bab735945e00c27e99a852f7ce\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8765139\nReviewed-by: Takuto Ikuta \u003ctikuta@chromium.org\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@chromium.org\u003e\n"
    },
    {
      "commit": "59d84e3b054313652b74928f5a9c550f4a951723",
      "tree": "5faf9736fcd47f3adc0f1c8c3998799513b73460",
      "parents": [
        "211da1846e2770d7c5c374b935d7d84b00161d49"
      ],
      "author": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Fri Nov 06 10:35:09 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Nov 06 10:35:09 2026"
      },
      "message": "siso: flush a dir output that already exists on disk\n\nWith output_local off, a remote or cached dir output was never flushed,\neven when an earlier build had materialized it. A flush is what updates\nchanged members on disk, so they kept their old contents: after the\nstale member prune, a tree {a(v1), b} rebuilt as {a(v2)} was left as\n{a(v1)} on disk.\n\nFlush a dir output that already exists on disk, as file outputs already\ndo.\n\nChange-Id: I86fc20cf98876d235282c529163305629b271522\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8753899\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\nCommit-Queue: Neri Marschik \u003cnerima@google.com\u003e\n"
    },
    {
      "commit": "211da1846e2770d7c5c374b935d7d84b00161d49",
      "tree": "505036493bb786058278696f5687e01579484f9d",
      "parents": [
        "1cec572fe19e67395987667c99119c3b4be2d760"
      ],
      "author": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Fri Nov 06 10:31:08 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Nov 06 10:31:08 2026"
      },
      "message": "siso: prune stale members when a remote or cached dir output shrinks\n\nLocal execution wipes a directory output before the action re-runs\n(ResetDirOutput), but a remote or cached result is only flushed, and a\nflush never removes files. So when a directory output shrank, the files\nit dropped stayed on disk. This also affects two phase cache hits of\nlocal steps. In an Android catchup build, a stale .so left in the system\nimage staging dir made system.img and its dependents miss the cache and\ndiffer from a clean build.\n\nAfter recording a remote/cache result, remove the on-disk entries under\nthe directory that are not recorded with its cmdhash. Checking the\ncmdhash, not just presence, also catches stale files that a ReadDir walk\nalready picked up into hashfs as unowned records.\n\nChange-Id: If16cee099ed117fbb55dc19fad9ee3dee2e6afab\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8016906\nCommit-Queue: Neri Marschik \u003cnerima@google.com\u003e\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "1cec572fe19e67395987667c99119c3b4be2d760",
      "tree": "a653747d84e9a27076b73ef9f1e77d87e7d12e7c",
      "parents": [
        "8315c3619bae2aec4dda19b91011c1e12767d830"
      ],
      "author": {
        "name": "Junji Watanabe",
        "email": "jwata@google.com",
        "time": "Fri Nov 06 06:14:29 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Nov 06 06:14:29 2026"
      },
      "message": "siso: support output_local binding in ninja\n\nSupport an `output_local` binding on a ninja `rule` or `build`, like\nremote_enabled. `output_local \u003d true` forces writing all outputs of\nthe step to local disk, and `output_local \u003d false` disables\noutput_local set in the StepConfig rule.\n\nIt is applied when the edge matches a StepConfig rule or is configured\nby remote_* bindings. output_local alone doesn\u0027t create a \"ninja:\" rule\nto keep such a step impure and local, whose outputs are on local disk\nanyway.\n\nBug: b:578729816\nTest: go test ./build/... ./subcmd/ninja/...\nChange-Id: I5972e1a7b0ded04c0d6aa6a65d56196715ce29a4\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8752819\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\nAuto-Submit: Junji Watanabe \u003cjwata@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "8315c3619bae2aec4dda19b91011c1e12767d830",
      "tree": "6e1f86cfba4f0f50c38fd410b52267d92055cef0",
      "parents": [
        "1c1ea7a39bfaa234db2915a1d765914265c78cde"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Fri Nov 06 05:38:20 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Nov 06 05:38:20 2026"
      },
      "message": "siso: fix ExpandSymlinks\n\nExpandSymlinks iterates maxSymlinks even if it gets resolved path.\nUse StatIfExists instead of Stat to reduce unnecessary lstat call\non intermediate directories.\n\nChange-Id: Ib11beec1076eb1b5680453c256993d32e76d544b\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8751620\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "1c1ea7a39bfaa234db2915a1d765914265c78cde",
      "tree": "178237057b408a3803fdd8320a457c3279f57d35",
      "parents": [
        "9bf0b33a23f5ba76f0a588b72aa5fb96d9c8be7e"
      ],
      "author": {
        "name": "Junji Watanabe",
        "email": "jwata@google.com",
        "time": "Fri Nov 06 05:10:42 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Nov 06 05:10:42 2026"
      },
      "message": "siso: add .jdeps to minimum output_local strategy\n\nAndroid\u0027s local javac-input-delta, kotlin-input-delta, and\nksp-input-delta actions read the prior build\u0027s .jdeps lookup caches to\nprune incremental Java/Kotlin compilation, without declaring them as\nNinja inputs (to avoid circular dependencies). With\n-output_local_strategy\u003dminimum, remotely built .jdeps files are not\nwritten to local disk, which disables the pruning.\n\nAdd .jdeps to the minimum strategy so soong_ui can use Siso\u0027s minimum\nstrategy instead of maintaining a separate copy of its patterns\n(ag/43440262).\n\nAlso fix the missing leading dot on \"cxx\", which prevented .cxx\noutputs from matching the minimum strategy.\n\nBug: b:578729816, b:580717416\nTest: go test ./subcmd/ninja/...\nChange-Id: I75ea817dec3c7e659c764447f70b5623853745b8\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8752659\nAuto-Submit: Junji Watanabe \u003cjwata@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@chromium.org\u003e\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "9bf0b33a23f5ba76f0a588b72aa5fb96d9c8be7e",
      "tree": "5e159f2209ba0607cc13f5776180d3c115333579",
      "parents": [
        "b605542b572fd8eaf59d448b6316db05e0444342"
      ],
      "author": {
        "name": "gregorynisbet",
        "email": "gregorynisbet@google.com",
        "time": "Thu Nov 05 07:58:30 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Nov 05 07:58:30 2026"
      },
      "message": "siso: fix stale rPathIdx and rDeps aliasing in deps_log\n\nFix two snapshot consistency bugs in both toolsupport/ninjautil/deps_log\nand build/ninjabuild/deps_log:\n\n1. In Recompact / recompactIfNeeded, clear d.rPathIdx before copying\n   nd.pathIdx into it. Previously, maps.Copy into the existing map left\n   stale entries for paths dropped during recompaction (such as a header\n   file removed from a target\u0027s dependencies). Subsequent RetrievePaths\n   or RetrieveIDs lookups for a dropped path resolved its stale index\n   against the compacted rPaths slice and failed with \"inconsistent path\n   in deps log\" instead of returning ErrNoDepsLog.\n\n2. In NewDepsLog / readDepsLog, Reset, and Recompact / recompactIfNeeded,\n   clone d.deps / nd.deps when assigning d.rDeps. Previously, d.rDeps\n   aliased the backing array of d.deps, so in-place updates in Record\n   mutated the read-only snapshot before Reset was called.\n\nTAG\u003dagy\nCONV\u003d5d4f79e8-5fda-4123-8765-1695dbad1073\n\nBug: 374196367, 444080717\nTest: go test -race ./toolsupport/ninjautil ./build/ninjabuild\nChange-Id: I10a2c23854c545cedc8847287358638d582da41c\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8738322\nCommit-Queue: Gregory Nisbet \u003cgregorynisbet@google.com\u003e\nAuto-Submit: Gregory Nisbet \u003cgregorynisbet@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "b605542b572fd8eaf59d448b6316db05e0444342",
      "tree": "a332eb194adddf307119b9663927b73075c28f8a",
      "parents": [
        "45ec934eeb1b81074f07ba21eb2c7d60628da78f"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Thu Nov 05 06:42:25 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Nov 05 06:42:25 2026"
      },
      "message": "siso: exclude skipped lines from binding counts\n\nparseChunk incremented pool, rule, and build binding counters before\nskipping indented comments and whitespace-only lines. Count only lines\nrecorded as binding statements to avoid reserving unused binding arena\nslots.\n\nAdd coverage for all three binding types, comments, whitespace-only\nlines, and LF and CRLF line endings.\n\nChange-Id: If2fb8ef3cc59b5354ed7d22b3f7764c3c9e3b65b\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8736441\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nAuto-Submit: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "45ec934eeb1b81074f07ba21eb2c7d60628da78f",
      "tree": "eb5fab231dbdf495071a08ad87bfda6bd21d2768",
      "parents": [
        "aec4caf6dd2adc4f878e6c4da616d4394b75037b"
      ],
      "author": {
        "name": "Michael Hoisie",
        "email": "hoisie@google.com",
        "time": "Thu Nov 05 06:18:10 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Nov 05 06:18:10 2026"
      },
      "message": "siso: ninjautil: read legacy deps log records from the file buffer\n\nNewDepsLog read the whole file into memory, then read each record back\nout of it through a bytes.Reader: binary.Read for each header and path\nchecksum, a Seek, and a copy into a 4MB scratch buffer. Walk the buffer\ndirectly instead, and decode deps records without an intermediate\n[]int32. Also size the paths and deps by the number of path records,\nwhich grew the deps slice 100 entries at a time (~2,000 copies for 196k\noutputs), and clone the path index instead of copying it entry by entry.\n\nBenchmarkNewDepsLog (20k outputs x 200 deps), 6 runs each:\n- 128-136ms -\u003e 35-37ms per load\n- 307MB -\u003e 71MB and 402k -\u003e 111k allocations per load\n\nNo-op builds, 3 runs each:\n- Chromium chrome (106MB legacy deps log): deps log load 0.69-0.75s\n  -\u003e 0.22-0.23s\n- Android module (326MB legacy deps log): deps log load 1.30-1.33s -\u003e\n  0.46-0.52s\nThe total build time doesn\u0027t change in these builds, where the fs state\nload runs longer in parallel.\n\nBug: b/578560378\nTest: go test ./...\nChange-Id: I823c1f318228e5d90d8b096b2236a92dbd840338\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8738283\nCommit-Queue: Michael Hoisie \u003choisie@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@chromium.org\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "aec4caf6dd2adc4f878e6c4da616d4394b75037b",
      "tree": "cf7f2fe8f7e0f6af1edeab16312be411d0776ffe",
      "parents": [
        "40ad5288ef55d8a0736699ffab2c90989bbe5e79"
      ],
      "author": {
        "name": "Michael Hoisie",
        "email": "hoisie@google.com",
        "time": "Thu Nov 05 06:18:03 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Nov 05 06:18:03 2026"
      },
      "message": "siso: hashfs: map state entries only when the journal has entries\n\nloadJournal mapped every state entry by name before reading the\njournal, even when the journal has only its header, which is the usual\ncase. Build the map when the first journal entry is merged.\n\nNo-op build of one Android module (880k state entries), 3 runs each:\n- fs state load to entry init: 0.30-0.32s -\u003e 0.06s\n- siso ninja: 2.64-3.08s -\u003e 2.66-2.74s (the deps log, loaded in\n  parallel, is then the longest step)\n\nNo change for builds without a journal file, such as a Chromium chrome\nno-op build.\n\nBug: b/578560378\nTest: go test ./...\nChange-Id: I262a94cc3dec7ded54d279977703f83dc2d3033e\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8738782\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Michael Hoisie \u003choisie@google.com\u003e\n"
    },
    {
      "commit": "40ad5288ef55d8a0736699ffab2c90989bbe5e79",
      "tree": "c67e36ff5532353324ca1dbccc1dae6a1beecb8a",
      "parents": [
        "72d28652b98632517855dcd62b0ad9ff16f2bbdb"
      ],
      "author": {
        "name": "Michael Hoisie",
        "email": "hoisie@google.com",
        "time": "Thu Nov 05 06:14:29 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Nov 05 06:14:29 2026"
      },
      "message": "siso: hashfs: stat state entries in one chunk per worker\n\nupdateFromDisk started one goroutine per state entry, limited to\nGOMAXPROCS running at a time: 880k goroutines for an Android tree and\n258k for Chromium. The goroutine handoffs cost more than the stats.\nSplit the entries into one chunk per worker with slices.Chunk instead,\nso it starts GOMAXPROCS goroutines (96 on the host below).\n\nNo-op builds, 3 runs each:\n- Chromium chrome (258k state entries): update from disk 0.38-0.42s -\u003e\n  0.21-0.24s, siso ninja 3.05-3.12s -\u003e 2.87-2.96s (0.93-1.02s from\n  1.11-1.15s with fast_nop)\n- Android module (880k state entries): update from disk 1.16-1.18s -\u003e\n  0.58-0.62s, siso ninja 2.64-3.08s -\u003e 2.34-2.44s\n\nBug: b/578560378\nTest: go test ./...\nChange-Id: I851aefca27c1bf6bd28bd287fbcaf17134837fe9\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8738282\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Michael Hoisie \u003choisie@google.com\u003e\n"
    },
    {
      "commit": "72d28652b98632517855dcd62b0ad9ff16f2bbdb",
      "tree": "1cf6324cafacf3cae8caa1fa963144fb842c4eef",
      "parents": [
        "819f1983493abc231c35421a3518f7a980025041"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Thu Nov 05 03:28:37 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Nov 05 03:28:37 2026"
      },
      "message": "siso: improve batch digester for slow/cold cache abfs\n\nfor first abfs mount, get-rbe-digests call would not be\nfast as cache warmed mounts. So, lazy digests for\ninitial stats would take long time and would race\nwith bachDigester for Entries call.\nTo reduce calls, better to recheck e.d in d.sema.Do in\nbatchDigestForABFS.\nAlso use same chunking in batchDigester.wait.\n\nChange-Id: I1f6f9675ec43cfee90b9e020276c4bec6532533c\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8734827\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "819f1983493abc231c35421a3518f7a980025041",
      "tree": "8d673153d98dc8902b8ca773a3a63020d0be3d2e",
      "parents": [
        "9b7a7f5c1be7606edd5c566698eb7735817716f1"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Thu Nov 05 02:43:49 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Nov 05 02:43:49 2026"
      },
      "message": "siso: report auth error as infra failure\n\nauth error should be considered as infra failure,\nrather than build failure.\nbad platform container image also considered as infra failure.\n\nBug: b/581639250\nChange-Id: I741597bc740f8d209dd9275fc7dd99517c98b87b\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8724474\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "9b7a7f5c1be7606edd5c566698eb7735817716f1",
      "tree": "4e1b0c09a12033356a7420a916ab2d35e25ee592",
      "parents": [
        "bf30a944645c5d51b692ae04ee32e078fe9c71d6"
      ],
      "author": {
        "name": "Oren Azad",
        "email": "oazad@adobe.com",
        "time": "Wed Nov 04 07:41:23 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Nov 04 07:41:23 2026"
      },
      "message": "siso: webui listen on localhost only\n\nThe webui printed \"listening on http://localhost:PORT\" but actually\nlistened on all interfaces, exposing it to the network without\nauthentication.\n\nBug: None\nChange-Id: Ibf26ef8d75a8cb39bc4a257a7cdf97198b99c62c\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8587817\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@chromium.org\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@chromium.org\u003e\n"
    },
    {
      "commit": "bf30a944645c5d51b692ae04ee32e078fe9c71d6",
      "tree": "b10e11e20e7fe67689b7c122d2fbb26cc63cdfa3",
      "parents": [
        "351c52e7409cd2447eba29542fd912fa59992294"
      ],
      "author": {
        "name": "Jihoon Kang",
        "email": "jihoonkang@google.com",
        "time": "Wed Nov 04 00:45:41 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Nov 04 00:45:41 2026"
      },
      "message": "Add --shell to override the default shell\n\nSiso by default will use /bin/sh -c \u0027\u003ccommand\u003e\u0027\nfor any nontrivial commands. This uses the host\nmachine\u0027s shell. We want to use a hermetic,\nin-tree shell in android, so add a --shell flag\nto supply it to siso.\n\nThis allows us to run commands on \"distroless\"\n(https://github.com/googlecontainertools/distroless)\ndocker images on RBE, that only have glibc, some\ntimezone data, and not much else. Noteably they\nhave no shell.\n\nBug: 475013705\nTest: go test\nChange-Id: I256f2f6ab59d95d3ce7cc2aa6598b2ce941c6d2e\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8646365\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Jihoon Kang \u003cjihoonkang@google.com\u003e\n"
    },
    {
      "commit": "351c52e7409cd2447eba29542fd912fa59992294",
      "tree": "1e112eba2302ca927d26e737bc28e5905497ea71",
      "parents": [
        "1790942ff7beff54482d1665730f707ca762146c"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Mon Nov 02 08:34:02 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Nov 02 08:34:02 2026"
      },
      "message": "siso: fix bindingArena and shardBindings over-allocations\n\nfileParser.alloc previously reserved nrulevar + nbuildvar in\nbindingArena even though bindingArena is only used by parseRule\n(build statements use buildScope). In addition, parseChunk incremented\nch.nvar on every indented build, rule, and pool variable binding in\naddition to top-level variable declarations, inflating newShardBindings\nshard counts across large manifests.\n\nReserve only nrulevar in bindingArena and count only top-level variable\ndeclarations in ch.nvar.\n\nBenchmarkLoadAndroid (7.12M nodes), 128-CPU host, 6 fresh processes:\n  sec/op     7.662    -\u003e 7.635     (-0.4%)\n  B/op       15.91Gi  -\u003e 15.12Gi   (-4.9%)\n  allocs/op  8.51M    -\u003e 8.33M     (-2.1%)\n\nBenchmarkLoadChromium, 128-CPU host, 6 runs:\n  sec/op     0.687    -\u003e 0.702     (+2.1%)\n  B/op       890.0Mi  -\u003e 876.2Mi   (-1.6%)\n  allocs/op  1.692M   -\u003e 1.670M    (-1.3%)\n\nBug: b/577510209\nChange-Id: Idf3c3406d35ee0740073431abf99e43c874899c0\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8682490\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "1790942ff7beff54482d1665730f707ca762146c",
      "tree": "1d6b7ec3bae2331cbccac94a2d834903d757a2e6",
      "parents": [
        "80c4783346556eb1c159d4dabdab15d982a0b954"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@chromium.org",
        "time": "Mon Nov 02 08:10:36 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Nov 02 08:10:36 2026"
      },
      "message": "siso/clog: increase ConcurrentWriteLimit\n\ncloud.google.com/go/logging defaults to ConcurrentWriteLimit \u003d 1. During\nlarge builds generating ~2.4M log entries (~2,400 bundles), a single\nWriteLogEntries worker (~123ms/RPC) could only flush about half of the\nbundles during the build, leaving ~1.2M entries (~640-880MB inuse_space)\nqueued in memory at build completion and causing Logger.Close to time\nout after 1s.\n\nSet ConcurrentWriteLimit(runtime.GOMAXPROCS(0)) by default so bundler\nwrites keep pace with step logging.\n\nBug: 485417274, 579608201\nChange-Id: I3b8997ad69c7ba65a3e4861dc8fb85d9ff87a507\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8682783\nAuto-Submit: Takuto Ikuta \u003ctikuta@chromium.org\u003e\nReviewed-by: Alex Ovsienko \u003covsienko@google.com\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@chromium.org\u003e\n"
    },
    {
      "commit": "80c4783346556eb1c159d4dabdab15d982a0b954",
      "tree": "7c6cf0deae2165f66e56c1e878c3d836d1024597",
      "parents": [
        "17c7d084eb7ddb8b6f4e3e4dbdb201abeb9e5bd1"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Mon Nov 02 03:10:44 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Nov 02 03:10:44 2026"
      },
      "message": "siso: update version string to v1.6.9\n\nv1.6.8 is rolled out as pinned version at\ngit_revision:c508213533aa5cd425b69cb0f66e53522d77022d\nhttps://crrev.com/c/8690747\nhttp://ag/43443719\n\nORIGINAL_AUTHOR\u003dukai\nTAG\u003dagy\nBug: b/577790756\nChange-Id: Idb6cb234cd061b87aea6d71967ae57c382986885\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8690748\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "17c7d084eb7ddb8b6f4e3e4dbdb201abeb9e5bd1",
      "tree": "ba6bc66e10ec70741b64c94053d4c29ee6a11574",
      "parents": [
        "c508213533aa5cd425b69cb0f66e53522d77022d"
      ],
      "author": {
        "name": "Junji Watanabe",
        "email": "jwata@google.com",
        "time": "Mon Nov 02 02:19:59 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Nov 02 02:19:59 2026"
      },
      "message": "siso/hashfs: do not poison entry when digest caller is canceled\n\nWhen the first caller of entry.compute has its context canceled while\nlocalDigest is hashing a file on disk (for example, when a racing step\nfinishes first and cancels its per-step context), entry.compute\npreviously wrote context.Canceled onto e.err and closed e.dch, poisoning\nthe shared entry for concurrent and subsequent callers.\n\nDetach the context passed to localDigest with context.WithoutCancel and\nupdate e.d / e.err and close dch inside the digest goroutine so canceled\ncallers return context.Cause(ctx) promptly without poisoning the shared\nentry or failing other waiters.\n\nORIGINAL_AUTHOR\u003djwata\nTAG\u003dagy\n\nBug: 579630786\nChange-Id: I9be40bf55fc9e2a4ad17bc945faedfab96ee89db\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8689785\nAuto-Submit: Junji Watanabe \u003cjwata@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "c508213533aa5cd425b69cb0f66e53522d77022d",
      "tree": "6d22d5acf5c417921bb1a18317966e9d982a63ed",
      "parents": [
        "5680e89b24cb24eb56c5c8784080a7842cc18be1"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Fri Oct 30 13:56:31 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 30 13:56:31 2026"
      },
      "message": "siso: fix flaky TestRegisterFiles_Batching\n\nInstead of modifying batchDelay, run test under synctest.\nUnder syntext, fake time only advanced by defaultBatchDelay,\nso eliminating wall clock race.\n\nBug: b/579732326\nChange-Id: I4b032a035327377586b75e770744bcbe15132da8\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8692365\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "5680e89b24cb24eb56c5c8784080a7842cc18be1",
      "tree": "340908d9a45740b3932ee275321cf2957bcc75f9",
      "parents": [
        "bec5ddaf9ce4ceb2dbb29cefe852c5c93819122d"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Fri Oct 30 07:12:18 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 30 07:12:18 2026"
      },
      "message": "siso: document generator support and path normalization\n\nDocument that Siso mainly intends to support gn (Chromium) and soong\n(Android), and that support for other generators such as cmake is\noptional. Also document in docs/ninja_diff.md that Siso only strips a\nleading ./ when parsing .ninja files and expects generators to emit\nnormalized paths.\n\nBug: 578639457, 448631316\nChange-Id: Ie075a0c5bbaf1a2464eb4925e3d429f5e3de8c4d\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8681021\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "bec5ddaf9ce4ceb2dbb29cefe852c5c93819122d",
      "tree": "91001ca7eab968e5d191308ff74a9364c73415b4",
      "parents": [
        "2b4dcab7c99b57b4942eade8243a1404e76f5d4c"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@chromium.org",
        "time": "Fri Oct 30 06:38:08 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 30 06:38:08 2026"
      },
      "message": "siso/shutil: split command line by bytes instead of runes\n\nGN\u0027s EscapeStringToString_PosixNinjaFork escapes every byte \u003e\u003d 0x80 with\na backslash (e.g. \"ø\" \\xc3\\xb8 becomes \\x5c\\xc3\\x5c\\xb8). Iterating over\nthe command line by UTF-8 runes caused each isolated high byte to be\ndecoded as utf8.RuneError (\\ufffd) before unescaping.\n\nSince all shell quotes, whitespace, escapes, and metacharacters handled\nby Split are single-byte ASCII characters (\u003c 0x80), iterate by byte and\nuse WriteByte so byte-escaped multi-byte UTF-8 sequences are unescaped\ninto valid UTF-8 just like POSIX sh.\n\nEven if GN\u0027s escaping behavior is fixed in the future, Split is a fast\npath to avoid invoking \"/bin/sh -c\" and should match POSIX shell\nbyte-level unescaping semantics (as well as avoid unnecessary per-rune\nUTF-8 decoding and re-encoding overhead).\n\nBug: 579608201\nChange-Id: I18c64f5c6ce28bff80e75c69861cae3ea277fd4f\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8688116\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nAuto-Submit: Takuto Ikuta \u003ctikuta@chromium.org\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@chromium.org\u003e\n"
    },
    {
      "commit": "2b4dcab7c99b57b4942eade8243a1404e76f5d4c",
      "tree": "8bea5bd4af6c112aafaef53db4f9ac74e21535f3",
      "parents": [
        "9dbb442309b193a9bda8906a7067a9cb67b12127"
      ],
      "author": {
        "name": "Junji Watanabe",
        "email": "jwata@google.com",
        "time": "Fri Oct 30 05:56:03 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 30 05:56:03 2026"
      },
      "message": "siso: skip warning on ErrUnsupported in blob.FromLocalFile\n\nosfs.OSFS.FileDigestFromFS returns errors.ErrUnsupported on standard\nlocal filesystems without digest xattrs, CartFS, or ABFS. Because\nblob.FromLocalFile logged a clog warning on every non-nil error before\nfalling back to reading the file, builds logged a warning per local file\ndigest and contended on the Cloud Logging bundler mutex on high-core\nmachines.\n\nOnly log a warning in blob.FromLocalFile when FileDigestFromFS fails\nwith an error other than errors.ErrUnsupported, and add unit tests\ncovering filesystem digest hits, silent fallback on ErrUnsupported, and\nwarning on unexpected errors.\n\nORIGINAL_AUTHOR\u003djwata\nBug: 575633282\nChange-Id: Ib2a0f2bd4c0eae50188d6a1d2b4d1e84b6b82fcb\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8688876\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nAuto-Submit: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "9dbb442309b193a9bda8906a7067a9cb67b12127",
      "tree": "49245de2fd5771d4e406c14b32fb93fcef71cb7d",
      "parents": [
        "af64bf257d2e515a0896e26ede77c69f9e7ca227"
      ],
      "author": {
        "name": "Junji Watanabe",
        "email": "jwata@google.com",
        "time": "Fri Oct 30 02:43:59 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 30 02:43:59 2026"
      },
      "message": "siso: add auto-restat-content experiment\n\nSoong writes restat_content \u003d true itself for remote rules with restat\n(unless the rule opts out). This moves that logic into Siso, so Chromium\nand other Ninja generators get the same behavior.\n\nWith SISO_EXPERIMENTS\u003dauto-restat-content, restat \u003d true on a remote rule\n(remote: true in the step config, or remote_enabled \u003d true in\nbuild.ninja) is treated as restat_content \u003d true. An explicit\nrestat_content in the Ninja rule/build or the step config still wins,\nso restat_content \u003d false keeps the mtime-based behavior. Outputs\nproduced locally (local execution, local fallback or the local racer)\nstill use mtime, because computeOutputEntries checks restat on local\noutputs before restat_content.\n\nWe plan to enable this per builder first (the $build/siso experiments\nrecipe property, and SISO_EXPERIMENTS on Android CI) before making it\nthe default. Local-only builds stay mtime-based for now.\n\nBug: 575621006\nTest: go test ./build/... ./execute/... ./subcmd/ninja/...\nORIGINAL_AUTHOR\u003djwata\n\nChange-Id: I916c0d2eeb1e60a20dd42ad7b620b7a5fc9d99ea\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8673082\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\nAuto-Submit: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "af64bf257d2e515a0896e26ede77c69f9e7ca227",
      "tree": "45a0f00358ad4889459aa60e02f5d696fb5cb6b2",
      "parents": [
        "c961df8216d60b50257feb87fd18ff3139fc55e2"
      ],
      "author": {
        "name": "Junji Watanabe",
        "email": "jwata@google.com",
        "time": "Fri Oct 30 02:40:28 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 30 02:40:28 2026"
      },
      "message": "siso: log local restat_content output with mtime update but same content\n\nOutputs written locally (local execution, local fallback or the local\nracer) use mtime for restat even when restat_content is set, so a step\nthat rewrites identical content is considered changed locally but\nunchanged when run remotely.\n\nRecord a dedicated warning log for this case so we can find such steps\nwhile rolling out the auto-restat-content experiment. Also run the check\nwhen only restat_content is set, not just restat.\n\nR\u003dukai@google.com\n\nBug: 575621006\nTest: go test ./execute/... ./subcmd/ninja/e2etests -run Restat\nChange-Id: Ia32fd556fc623dcb3ec163b274d0d14528ac004f\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8682486\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "c961df8216d60b50257feb87fd18ff3139fc55e2",
      "tree": "08d7b425c890222a4e67a1347ec5b6c3738566c7",
      "parents": [
        "bcfb7a4f3adf5e4cdd838d2e8da3d0f07bba3e1d"
      ],
      "author": {
        "name": "Alex Ovsienko",
        "email": "ovsienko@google.com",
        "time": "Thu Oct 29 11:39:53 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 29 11:39:53 2026"
      },
      "message": "siso: add experimental duration-weighted step scheduling\n\nSiso currently assigns unit weight to every non-phony step, which\nprioritizes dependency chain depth without accounting for step execution\ntime. Load predicted per-output step weights (with action-regex and\ndefault fallbacks for unseen outputs) when -weights_file or\n$SISO_WEIGHTS_FILE is specified.\n\nBug: b:577862707\nTest: go test ./build ./build/ninjabuild ./subcmd/ninja\nChange-Id: I18f4d02b671e763c407869461053504234381a7a\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8667444\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Alex Ovsienko \u003covsienko@google.com\u003e\n"
    },
    {
      "commit": "bcfb7a4f3adf5e4cdd838d2e8da3d0f07bba3e1d",
      "tree": "4c566ba5314288d60d515b07f7a90d95fd827ed8",
      "parents": [
        "1a89224e0d0e7bee6bb41c66451c850e9c987507"
      ],
      "author": {
        "name": "Alex Ovsienko",
        "email": "ovsienko@google.com",
        "time": "Thu Oct 29 11:26:44 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 29 11:26:44 2026"
      },
      "message": "siso: replace scheduler KnownWeights with StepWeight\n\nReplace schedulerOption.KnownWeights pre-populating target weights in\nnewScheduler with an optional StepWeight(*Step) int callback evaluated\nper non-phony step in addStep, clamping returned weights to at least 1\nso non-phony steps cannot receive phony weight 0.\n\nBug: b:577862707\nTest: go test ./build ./build/ninjabuild ./subcmd/ninja\nChange-Id: I354ddccc762a74b255cbffd5d41f423ad52111fb\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8680240\nCommit-Queue: Alex Ovsienko \u003covsienko@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "1a89224e0d0e7bee6bb41c66451c850e9c987507",
      "tree": "fbf9e8f3c83842f2a1307ccf34235b13f347b71c",
      "parents": [
        "cef36859635dcce1ecf0a77bc5166e771bc48927"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Thu Oct 29 08:23:02 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 29 08:23:02 2026"
      },
      "message": "siso: fix panic on a Ninja pool at the end of a chunk\n\nparsePool looked up the pool\u0027s depth at the position of the statement\nafter the pool\u0027s bindings, so a pool that ended a manifest, or a chunk\nof it, indexed past the statements and panicked.\n\nChange-Id: I896c7d27197b0aedeceb12b2a68e7cf60867ba69\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8682481\nAuto-Submit: Philipp Wollermann \u003cphilwo@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "cef36859635dcce1ecf0a77bc5166e771bc48927",
      "tree": "53637b4c60240a001aec896473c6b2bce978243a",
      "parents": [
        "85ceb518c9a087914335605dad876fcabd046af5"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Thu Oct 29 08:22:57 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 29 08:22:57 2026"
      },
      "message": "siso: fix panic on a trailing Ninja keyword without newline\n\nisStatement read the byte after the keyword without checking the buffer\nlength, so a manifest ending in a keyword such as \"build\" without a\nnewline panicked with an index out of range.\n\nChange-Id: Ia8a6c7281c15eb39701824b0012ac7c5276d2ab1\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8682480\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nAuto-Submit: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "85ceb518c9a087914335605dad876fcabd046af5",
      "tree": "a6d44c75c0a739a55d52182ca0dcbcaeec63d708",
      "parents": [
        "e27263b62259c66e4f847f59f0ccbf2b30fb23f3"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Thu Oct 29 08:21:43 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 29 08:21:43 2026"
      },
      "message": "siso: fix hang on a trailing Ninja comment without newline\n\nparseChunk checked the wrong index for the end of a comment line, so a\nmanifest whose last line is a comment without a trailing newline looped\nforever.\n\nChange-Id: I5035197044f169b981db89f188dd9899e9e7be27\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8682320\nAuto-Submit: Philipp Wollermann \u003cphilwo@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "e27263b62259c66e4f847f59f0ccbf2b30fb23f3",
      "tree": "ab0535eb6b5c295f4481e2f3d696b87b483b280f",
      "parents": [
        "c2f54f2c2086696970ca322bd19603211150499c"
      ],
      "author": {
        "name": "Richard Wang",
        "email": "richardwa@google.com",
        "time": "Thu Oct 29 05:15:43 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 29 05:15:43 2026"
      },
      "message": "Enforce subtest name linter repo-wide\n\nAll Go modules now pass the subtest name check, so we can drop the\nallowlist and run it on all affected directories.\n\nAlso run the check on all modules when PRESUBMIT.py or\ninfra/subtestanalyzer/ changes, since those can change results for code\nthe CL doesn\u0027t touch.\n\nSkip runmc and siso-tap on non-Linux hosts, as runmc is `//go:build\nlinux` and siso-tap needs libseccomp, which presubmit only fetches on\nLinux. Presubmit bots still check them.\n\nBug: 539831698\nChange-Id: I62d69c9562d4b93f11ac83f6e2186edc6a6a6964\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8679639\nReviewed-by: Takuto Ikuta \u003ctikuta@chromium.org\u003e\nCommit-Queue: Richard Wang \u003crichardwa@google.com\u003e\n"
    },
    {
      "commit": "c2f54f2c2086696970ca322bd19603211150499c",
      "tree": "8e406ec34536ee58d92cf45dd993b773133eb726",
      "parents": [
        "3286f79878b2cfb7e83098fc275985e19a271d76"
      ],
      "author": {
        "name": "Alex Ovsienko",
        "email": "ovsienko@google.com",
        "time": "Thu Oct 29 05:10:54 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 29 05:10:54 2026"
      },
      "message": "siso: propagate critical-path weights across multi-output steps\n\nscheduleTarget only attaches step, edge, and targetsSorted to the\nfirst-visited output of a multi-output step, so downstream chains or\nKnownWeights on secondary outputs were ignored during finish(). Fold\nweight and criticalPathWeight across all step outputs so multi-output\nsteps receive and propagate their full critical-path priority.\n\nBug: b:577862707\nTest: go test ./build -run TestScheduler_MultiOutputWeightPropagation\nChange-Id: I14a6d9cfa3a52466caeea745a46646feddf12c41\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8674198\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Alex Ovsienko \u003covsienko@google.com\u003e\n"
    },
    {
      "commit": "3286f79878b2cfb7e83098fc275985e19a271d76",
      "tree": "59b34c91f53eb49b7f94ca7c7ef0bad5a601c046",
      "parents": [
        "1f789bd0f3b48012722a515a4945be4ec945edeb"
      ],
      "author": {
        "name": "Richard Wang",
        "email": "richardwa@google.com",
        "time": "Thu Oct 29 02:55:27 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 29 02:55:27 2026"
      },
      "message": "gong: fix subtest name linter findings\n\nBug: 539831698\nChange-Id: I7eea88798613208bd7a0e7aa55b792c06a6a6964\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8679638\nCommit-Queue: Richard Wang \u003crichardwa@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "1f789bd0f3b48012722a515a4945be4ec945edeb",
      "tree": "cc7f3bb2e65c9557a69649e40ac828172a2ca303",
      "parents": [
        "30be2fae580ca313ebe78bb1929d8f8d0b32e2e0"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Thu Oct 29 02:45:08 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 29 02:45:08 2026"
      },
      "message": "siso: compute Node out-edges lazily on State\n\nManifestParser.Load previously built per-node out-edge slices eagerly\nin a serial loop after nodeMap.freeze, allocating millions of []*Edge\nslices and writing pointers across the heap, while parseBuild\ncontended on n.nouts.Add(1) for shared tool inputs. Normal builds\nnever read OutEdges. OutEdges is used for target^ or query tool.\n\nReplace nouts and outs on Node with a test-and-set hasOut atomic.Bool\nfor RootNodes and Graph.isDead, shrinking Node from 72 B to 40 B and\nremoving a GC-scanned slice header from every node. Move OutEdges to\nState and compute reverse edges lazily on first call using a flat\ncompressed spare row []*Edge buffer for target^, siso query rule, and webui.\n\nBenchmarkLoadAndroid (7.12M nodes), 128-CPU host, 6 fresh processes:\n  sec/op     6.528    -\u003e 4.996     (-23.5%)\n  B/op       17.18Gi  -\u003e 15.86Gi   (-7.7%)\n  allocs/op  14.32M   -\u003e 8.51M     (-40.6%)\n\nBenchmarkLoadChromium, 128-CPU host, 6 runs:\n  sec/op     1.784    -\u003e 0.932     (-47.8%)\n  B/op       1.414Gi  -\u003e 1.066Gi   (-24.6%)\n  allocs/op  1.888M   -\u003e 1.533M    (-18.8%)\n\nBug: b/577510209\nChange-Id: I509aa111f8adc3549e6945289d0709c6dd1c3781\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8668318\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "30be2fae580ca313ebe78bb1929d8f8d0b32e2e0",
      "tree": "1d46c2fc6799ca62560886f4500b44613d1842f5",
      "parents": [
        "47414e7f243f2d6b1796d1e87f1a26e511dcaa11"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Thu Oct 29 01:03:20 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 29 01:03:20 2026"
      },
      "message": "siso: negotiate the REAPI version with the server\n\nSiso used the server\u0027s high_api_version as its API version, so against a\nserver that advertises 2.0..2.12 it ran as a 2.12 client, although it\nimplements nothing newer than 2.3. It never checked the server\u0027s\nlow_api_version, and -reapi_version_to_use only logged an error when the\nrequested version was outside the server\u0027s range, and a warning when it\ndidn\u0027t parse, and then went on.\n\nLet\u0027s declare the range Siso implements as 2.0..2.3, and use the highest\nversion in both Siso\u0027s and the server\u0027s range. Init now fails when the\ntwo ranges don\u0027t overlap, and when -reapi_version_to_use doesn\u0027t parse\nor is outside either range. A server that doesn\u0027t advertise a version\ncounts as 2.0.\n\nChange-Id: Ied530a61b8b906cc21ed8334685992c70653d0ca\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8667005\nAuto-Submit: Philipp Wollermann \u003cphilwo@google.com\u003e\nCommit-Queue: Fumitoshi Ukai \u003cukai@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "47414e7f243f2d6b1796d1e87f1a26e511dcaa11",
      "tree": "dc530bc0c7a035562682ec9a2792d8cc6c504f84",
      "parents": [
        "8ea01fb7c91495ec19002135ac3c0322e7e2946a"
      ],
      "author": {
        "name": "Katie Hockman",
        "email": "katiehockman@google.com",
        "time": "Wed Oct 28 10:04:51 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 28 10:04:51 2026"
      },
      "message": "Add katiehockman@google.com to BUILD_TEAM_OWNERS\n\nChange-Id: I24bd6984fc1602435b9315940b322a66ec2a637e\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8656938\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "8ea01fb7c91495ec19002135ac3c0322e7e2946a",
      "tree": "7b68983799c39890a89a73748769fb3c31774679",
      "parents": [
        "033b3266c0a8afe4e0814f3e4f3f52b2a4b309bc"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Wed Oct 28 00:48:14 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 28 00:48:14 2026"
      },
      "message": "upgraded google.golang.org/grpc v1.84.0 \u003d\u003e v1.85.0\n\nhttps://github.com/grpc/grpc-go/releases/tag/v1.85.0\n\nChange-Id: I6df7ee647a5e842866056c549b40fb85a25da8e0\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8667340\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Fumitoshi Ukai \u003cukai@google.com\u003e\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "033b3266c0a8afe4e0814f3e4f3f52b2a4b309bc",
      "tree": "798aef23af0c2cea853f1d5710d39a8335d2f78c",
      "parents": [
        "5ae5c6a32ca87e2c6c9f9a5e32434a247015e456"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Tue Oct 27 23:01:26 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 27 23:01:26 2026"
      },
      "message": "siso: batch abfsRegister\n\nStep\u0027s number of outputs are usually small (1 or 2).\nAs siso runs many steps concurrently, we could batch\nabfsRegister in fewer set-rbe-digests calls.\n\nAlso configure http.Transport with MaxIdleConns and MaxIdleConnsPerHost\nset to GOMAXPROCS so unix domain socket connections are reused instead of\nclosed when more than 2 requests complete concurrently.\n\nMeasured on cf_x86_64_only_phone-trunk_staging-eng (ab/16720666,\n--no-tip, 208,511 steps) on a 64-core cloudtop:\n\n                                    before (0331*)  after (0625)\n      set-rbe-digests RPCs          128,631         33,335 (3.86x fewer)\n      files / calls per RPC         2.44 / 1.00     9.41 / 3.86\n      set-rbe-digests RPC time      9,697.5s        853.7s (-91%)\n      set-rbe-digests p50 / avg     17.6ms / 75.4ms 11.4ms / 25.6ms\n      cache/1000 serv-avg           2.006s          1.153s\n      two-phase-cache serv-avg      2.407s          1.423s\n      siso ninja wall time          18m21.01s       11m50.53s\n      no-change build wall time     61.37s          30.92s\n\nBug: b/559843941\nChange-Id: Id7b704bd78f348604ae37864215e45bd29c9ecee\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8604061\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "5ae5c6a32ca87e2c6c9f9a5e32434a247015e456",
      "tree": "eabc936763a9d1a502be41101df1a50eef4fe9c8",
      "parents": [
        "c5c18b032cb4bb2209038515547d80a09a6832a1"
      ],
      "author": {
        "name": "Cole Faust",
        "email": "colefaust@google.com",
        "time": "Mon Oct 26 18:02:27 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 26 18:02:27 2026"
      },
      "message": "siso/collector: bind ephemeral ports without listening in e2e tests\n\nIn TestCollector, freePorts allocated ephemeral loopback ports for the\ncollector\u0027s health and metrics listeners by calling net.Listen(\"tcp\", \"127.0.0.1:0\")\nand immediately closing the listeners.\n\nnet.Listen places sockets into TCP_LISTEN state via listen(2). On Linux,\nclosing a listening socket keeps the port retained in the kernel\u0027s TCP\nlistening table for a duration, causing subsequent bind(2) calls by the\ncollector daemon (such as the Prometheus exporter or health extension)\nto fail with EADDRINUSE (\"address already in use\").\n\nReplace net.Listen with platform-specific socket allocation that only\ninvokes bind(2) with port 0 without calling listen(2), extracts the\nassigned port via getsockname(2), and closes the socket. Unlistened\nbound sockets are immediately released by the OS on close.\n\nBug: b/522977774\nChange-Id: I1869ea9a550e3666b2b01bd846dba295b3a723c1\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8643740\nCommit-Queue: Cole Faust \u003ccolefaust@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "c5c18b032cb4bb2209038515547d80a09a6832a1",
      "tree": "9e3fee213ace2b0f12ebca779d33de5a2b4bfb61",
      "parents": [
        "7caeaf38be3981fbc41c87fcfd7d52cb48674ae2"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Mon Oct 26 07:12:35 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 26 07:12:35 2026"
      },
      "message": "siso: bound Ninja manifest parser concurrency\n\nThe manifest parser started a goroutine for every subninja file before\nit acquired its concurrency semaphore, so loading Chromium\u0027s manifest\ncreated about 13,724 loader goroutines; a runtime trace at\nGOMAXPROCS\u003d384 showed 11,146 live at once. CPU profiles attributed the\nlong tails of startup to GC root scanning and goroutine suspension.\n\nAcquire the loader semaphore before starting a file\u0027s goroutine, so\nthat files waiting for a permit don\u0027t hold a goroutine each, and release\nit once the file is parsed, before waiting for the permits of its\nsubninjas, so that parents can\u0027t hold every permit while waiting for\ntheir children. This bounds concurrent file parses rather than\ngoroutines: a parent keeps its goroutine while it schedules its\nsubninjas, which for Chromium\u0027s shallow tree are a handful. Cap the\npermits at 128, because above that the allocation-heavy parser drives\nthe Go GC into system CPU stalls on 384-CPU hosts. The rest of the\nbuild keeps the full GOMAXPROCS.\n\nThe parser doesn\u0027t check its context, so Load now returns the caller\u0027s\ncancellation cause if the context was cancelled during loading.\n\nBenchmarkLoadChromium, 384-CPU host, GOMAXPROCS\u003d384, 20 fresh processes:\n  sec/op     866.8m  -\u003e 658.7m   (-24.00%, p\u003d0.000)\n  B/op       3.930Gi -\u003e 3.789Gi  (-3.61%, p\u003d0.000)\n  allocs/op  2.263M  -\u003e 2.252M   (-0.48%, p\u003d0.000)\n\nIn 20 more fresh processes per version, a single manifest load took\n0.604-0.697 s, against 0.736-4.596 s before, and across the benchmark\nprocesses the worst-case system CPU time fell from 6622.49 s to\n13.34 s.\n\nChange-Id: I807e708aa0056673abb218ab4a003e88ba88b0f3\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8637033\nAuto-Submit: Philipp Wollermann \u003cphilwo@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "7caeaf38be3981fbc41c87fcfd7d52cb48674ae2",
      "tree": "3f0e7e39ee4b6d7dbbddcf03944fceba53656d1c",
      "parents": [
        "1ba4389e21d79cedcbf1382a2183ca430f89fb61"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Mon Oct 26 05:14:55 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 26 05:14:55 2026"
      },
      "message": "siso: size Ninja chunk slices for each manifest\n\nThe Ninja parser reserved room for GOMAXPROCS chunks in every manifest\nfile, but with chunks of at least 1 MiB almost every subninja file has\nonly one. On a 384-CPU host, Chromium\u0027s 13,720 subninja files thus\nreserved 383 unused slots each, about 2.78 GiB per graph load. That\nallocation wave drove the Go GC into high-CPU stalls: one slow load\nspent 26.98 s in a single GC cycle, and the same load was stable with\nGC disabled.\n\nReserve room only for the chunks that the file splits into.\n\nBenchmarkLoadChromium, 384-CPU host, GOMAXPROCS\u003d384, 20 fresh processes:\n  sec/op  0.8813    -\u003e 0.5941     (-32.59%, p\u003d0.000)\n  B/op    3.952 GiB -\u003e 0.887 GiB  (-77.56%, p\u003d0.000)\n\nIn real Siso dry runs, loading the Chromium graph took a median of\n6.231 s before (1.192-37.892 s) and 1.187 s after (0.742-3.607 s).\n\nChange-Id: I22e2764a8ba167193fc2712e9a164ac2dd759975\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8639550\nAuto-Submit: Philipp Wollermann \u003cphilwo@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "1ba4389e21d79cedcbf1382a2183ca430f89fb61",
      "tree": "992358d6ec38c98056ebe87f0d081e8dec906684",
      "parents": [
        "cf55454e39899df051692ad2bd118c7bb4db6868"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Mon Oct 26 04:48:43 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 26 04:48:43 2026"
      },
      "message": "siso: omit disabled gRPC keepalive option\n\nOn Unix sockets, Siso disables keepalive by zeroing its parameters, but\nstill passed the zero value to grpc.WithKeepaliveParams. grpc-go raises\na zero interval to its 10 s minimum and fills in its 20 s default\ntimeout, so the connection still failed PING ACK checks under high\nlocal build load. In a Chrome build with 384 concurrent actions, one\nrun logged 12,658 keepalive failures, and the retried streams made\nKajiya receive 68,184 Execute requests for 46,140 unique actions. The\nduplicate executions cost CPU time, lengthened scheduler queues and\nmade wall time vary widely.\n\nLeave out the keepalive option when every parameter is zero. TCP\nbackends keep their configured keepalive.\n\nChange-Id: I9bee70577cde186389aa72b39596c98a1057a32a\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8641689\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nAuto-Submit: Philipp Wollermann \u003cphilwo@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "cf55454e39899df051692ad2bd118c7bb4db6868",
      "tree": "877c3b8f13152a119b659d4658a6f9d8ceaefe3d",
      "parents": [
        "b87c1441433fc10628d53309371cb2581488fb7d"
      ],
      "author": {
        "name": "Alex Ovsienko",
        "email": "ovsienko@google.com",
        "time": "Mon Oct 26 03:53:38 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 26 03:53:38 2026"
      },
      "message": "siso: record each step\u0027s second-to-last input as prev2\n\nprev names the input whose completion released a step, which is enough\nto walk the critical path back from the last step but not to tell how\nmuch a faster step on that path would have shortened the build: once\nprev finishes earlier than the next-latest input, that input becomes\nthe release point. Record that input as prev2 in siso_metrics.json so\nconsumers can bound each critical-path step\u0027s drag without the full\ndependency graph. prev is unchanged.\n\nKeep the last two distinct releasing steps in a two-element array that\nshifts whenever a different step releases an input, so a producer with\nseveral outputs counts once.\n\nOn a 96k-step chrome build evaluated against the full dependency graph,\ndrag estimated from prev alone overstates the total 1.7-7x; with prev2\nit is within 13-17% and ranks the largest contributors correctly.\n\nChange-Id: Ia93701f45c2b9272937ee9948e992aae3098ffcf\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8641691\nCommit-Queue: Alex Ovsienko \u003covsienko@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "b87c1441433fc10628d53309371cb2581488fb7d",
      "tree": "d4ef15d55be4f209843257a738190c7c4f409708",
      "parents": [
        "f817c7328cf339a6a4c771c53d1ad33ece82d24a"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Mon Oct 26 02:14:17 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 26 02:14:17 2026"
      },
      "message": "siso: batch digest on abfs for lazyCompute\n\nuse batch get-rbe-digests for lazyCompute.\nreduce semaphore for abfs digests as we use batch operation.\n\nBenchmark on Android build (ab/16646657, --no-tip, 211,551 steps)\ncomparing efea3c1c (before) vs 9d247dad (with this CL):\n- Reduced file-digest ABFS RPCs by 7.05x:\n  - file-digest semaphore calls dropped from 367,812 (file-digest/1024,\n        366,672 single-file GETs + 1,140 batchDigester.wait calls) to\n        52,173 (file-digest/16, 50,968 popQueue + 1,204 batchDigester.wait).\n  - Background popQueue drained 96.0% of all files in the first 10s\n       after ninja load (and 99.6% within 11s):\n  - first 10s (during build.schedule): 50,938 calls, 353,194 files\n        (avg_batch \u003d 6.9, avg_ms \u003d 2.46ms).\n  - within 11s: 50,964 calls, 366,281 files (99.58%, avg_batch \u003d 7.2,\n        avg_ms \u003d 2.62ms); only 4 calls (1,537 files) in the rest of build.\n- Reduced on-demand batchDigester.wait time by 30.4%:\n  - 1,204 calls (10,751 files, 16.79s cumulative, avg_ms \u003d 13.95ms),\n        down from 1,140 calls (9,935 files, 24.13s cumulative,\n        avg_ms \u003d 21.16ms).\n- Wall-clock and CPU time:\n  - build.schedule: 11.20s -\u003e 9.15s (-2.05s, -18.3%)\n  - Siso build_exec: 2m45.74s -\u003e 2m45.07s (-0.67s; p10% steps -2.10s,\n        p75% -2.54s, p90% -2.14s)\n  - Siso build_total: 2m55.95s -\u003e 2m56.64s (+0.69s, due to +1.40s in\n        ninjabuild.Load: 9.92s -\u003e 11.32s)\n  - Overall initial build wall time: 5m25.89s -\u003e 5m24.25s (-1.63s)\n  - Overall no-op (.nochange) wall time: 27.74s -\u003e 25.53s (-2.21s)\n  - Siso CPU time: user 5581.5s -\u003e 5445.2s (-2.4%),\n        sys 967.5s -\u003e 874.7s (-9.6%)\n\nBug: b/559843941\nChange-Id: Ifca6212bb23c5d7fe9867ec145ac91d1574aff06\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8577631\nCommit-Queue: Fumitoshi Ukai \u003cukai@google.com\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "f817c7328cf339a6a4c771c53d1ad33ece82d24a",
      "tree": "58c8c76b26077152e149b8080d164cb0cedbde30",
      "parents": [
        "dfc32e4edca158cff2b64a1658ee3940f0116b3a"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Mon Oct 26 01:24:04 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 26 01:24:04 2026"
      },
      "message": "siso: update version string to v1.6.8\n\nv1.6.7 is rolled out as pinned version at\ngit_revision:dfc32e4edca158cff2b64a1658ee3940f0116b3a\nhttps://crrev.com/c/8654758\nhttp://ag/43274036\n\nBug: b/575200886\nChange-Id: I7bfcaf8f7595e7e487074cfeb41d1e5b93b6ebdf\nTAG\u003dagy\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8654878\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "dfc32e4edca158cff2b64a1658ee3940f0116b3a",
      "tree": "10b080f5e9219e1131638f6695dc64e0f49a8409",
      "parents": [
        "07dd00714f1ff29232e9b65e10b6bdf0df7d7c21"
      ],
      "author": {
        "name": "Jihoon Kang",
        "email": "jihoonkang@google.com",
        "time": "Fri Oct 23 00:42:59 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 23 00:42:59 2026"
      },
      "message": "siso: normalize \".\" REAPI working_directory so 2PC digests match\n\nWhen two-phase caching (2PC) is enabled, Builder.twoPhaseCachingLookup\nunconditionally sets step.cmd.CanonicalizeDir \u003d false so that input\nroots can match local paths. This setting persists when remote action\nexecution occurs after a 2PC cache miss.\n\nIn REAPI, \"\" and \".\" are semantically equivalent (both represent the\ninput root directory), but produce different Command proto serializations\nand digests. Android ABFS dev-warmup builds with 2PC had 0% action digest\noverlap with CI because working_directory was \".\" instead of \"\".\n\nInstead of mutating Siso\u0027s internal Path representation (where \".\" is\nthe canonical non-empty relative root representation used across paths,\ncasts, and Dir(), and New is unchanged), normalize \".\" to \"\" strictly\nat the REAPI boundary:\n- Introduce Cmd.WorkingDirectory() which normalizes \".\" to \"\" when\n  building rpb.Command. RemoteChroot output remains unchanged as\n  path.JoinRoot(root, \"\") and path.JoinRoot(root, \".\") both return New(root).\n  Use it in Cmd.CommandDigest when setting Command.working_directory.\n- Introduce Path.Equal to report whether two Paths are the same after\n  canonicalization, treating \"\" and \".\" as the same root path.\n- Use Path.Equal in reapiTwoPhaseCaching.matchAction to compare\n  step.cmd.WorkDir and cmd.GetWorkingDirectory(), preserving compatibility\n  with existing cache entries recorded with \".\".\n- Guard subcmd/recall against empty working_directory, as filepath.IsLocal(\"\")\n  is false and recall would otherwise reject commands with working_directory \"\".\n\nKeep TestCommandDigest_DotWorkDir, TestCommandDigest_NonRootWorkDir, and\nTestCommandDigest_RemoteChrootDotWorkDir as separate top-level tests with\nisolated hashFS instances and t.Context(), and add direct tests for\nCmd.WorkingDirectory and Path.Equal.\n\nBug: b/576384060\nChange-Id: I1f1332aac8a4f236d80e17c9684b56d80971068c\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8616931\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Jihoon Kang \u003cjihoonkang@google.com\u003e\n"
    },
    {
      "commit": "07dd00714f1ff29232e9b65e10b6bdf0df7d7c21",
      "tree": "055abba9a7f1aaf2b87320a58ee4f8ea5b3d7c23",
      "parents": [
        "0dd1534d3e492132314afd7e60ef5c8bdbb3899b"
      ],
      "author": {
        "name": "Junji Watanabe",
        "email": "jwata@google.com",
        "time": "Thu Oct 22 08:02:45 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 22 08:02:45 2026"
      },
      "message": "siso: preserve remote-only entries in .siso_fs_state during -t cleandead\n\nWhen siso ninja -t cleandead runs without -output_local_strategy,\nc.outputLocalStrategy defaults to \"full\", causing HashFS initNotExist\nto treat non-materialized remote outputs (from a prior greedy/minimum\nbuild) as missing locally-needed files and strip them when saving\n.siso_fs_state on exit.\n\nSince subtool \"cleandead\" only cleans dead generated files and does\nnot materialize build outputs, set c.outputLocal to return false so\nremote-only entries in .siso_fs_state are preserved regardless of\n-output_local_strategy.\n\nBug: 576369882\nChange-Id: Ief1d1b5add77ccd8e4aedaef4ee03bd58fa8af05\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8629287\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\nAuto-Submit: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "0dd1534d3e492132314afd7e60ef5c8bdbb3899b",
      "tree": "f3a445249228ec4dfe523ab1b58d736ca39f5ed3",
      "parents": [
        "46a923d6d6ef6cc063b94b4a039652ff29707a07"
      ],
      "author": {
        "name": "Junji Watanabe",
        "email": "jwata@google.com",
        "time": "Thu Oct 22 07:48:24 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 22 07:48:24 2026"
      },
      "message": "siso: fix -cleandead flag overwritten by resolveFlags\n\nIn crrev.com/c/7278456, resolveFlags was refactored to assign:\n  c.cleandead, err \u003d checkSubtool(c.subtool)\nWhen -cleandead is passed without -t cleandead, c.subtool is empty and\ncheckSubtool(\"\") returns (false, nil), overwriting c.cleandead back to\nfalse.\n\nOnly set c.cleandead \u003d true when checkSubtool returns true so the\n-cleandead flag is preserved.\n\nBug: 576369882\nChange-Id: I2974afa648554a7fe3aac62846b4b3aa1da87243\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8629267\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nAuto-Submit: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "46a923d6d6ef6cc063b94b4a039652ff29707a07",
      "tree": "50f4801e3b909b4ba7e048c5085d5d1fa63254b7",
      "parents": [
        "649804301f76355453dad74e151f7693dd2d8066"
      ],
      "author": {
        "name": "Andrew Paseltiner",
        "email": "apaseltiner@google.com",
        "time": "Wed Oct 21 13:16:15 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 21 13:16:15 2026"
      },
      "message": "siso: update target state cache in checkLocalOutputs\n\nWhen a step with a stale .siso_deps entry stats a pre-existing generated\nfile in inputMtime before the local action that regenerates that file\nhas executed, b.targets caches {mtime: old, changed: false} for the\ngenerated file.\n\nUnlike (*Builder).outputs, (*Builder).checkLocalOutputs did not update\nb.targets after local execution completed, leaving the stale\nchanged\u003dfalse entry in b.targets and causing downstream steps that\ngenuinely depend on the regenerated file to skip rebuilding.\n\nUpdate b.targets in (*Builder).checkLocalOutputs for declared file and\ndirectory outputs. Also store dirtyErr in b.targets when walking a\ndirectory output fails in both (*Builder).checkLocalOutputs and\n(*Builder).outputs, matching inputMtime.\n\nFixed: b/575838859\nChange-Id: Ie72decf3d685d21ccc1b7ed2c59f3359d923bd76\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8620378\nCommit-Queue: Andrew Paseltiner \u003capaseltiner@chromium.org\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "649804301f76355453dad74e151f7693dd2d8066",
      "tree": "14f0e3b2e6c991cb4fc869c2ee74f588bfe54fdd",
      "parents": [
        "9b0ad4285e3d00523cb74f0f39b62739970a01b3"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Tue Oct 20 23:55:24 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 20 23:55:24 2026"
      },
      "message": "siso: ensure parent directory for symlink before flush\n\nwith SISO_EXPERIMENTS\u003ddisable-ensure-output-dirs,\ncache result of step generates symlink would fail\nsince parent directory of symlink output doesn\u0027t exist\nand local fallbacks.\n\nensure parent directory for symlink exists before flush it.\n\nBug: b/461917619\nChange-Id: Id7dbb91bdcd61254505cc9aac7d9546c3c7df5ea\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8602173\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Fumitoshi Ukai \u003cukai@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "9b0ad4285e3d00523cb74f0f39b62739970a01b3",
      "tree": "a70c1799f1713c6cd0edbbe4c2ea10132fb3e220",
      "parents": [
        "48b658d07af9d51b1a7077ff8e4cda8ba88a0cf0"
      ],
      "author": {
        "name": "Cole Faust",
        "email": "colefaust@google.com",
        "time": "Tue Oct 20 21:25:14 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 20 21:25:14 2026"
      },
      "message": "Remove restat-content-applies-to-empty-files experiment\n\nWe want this to always be the behavior.\n\nBug: 561799494\nTest: go test\nChange-Id: I1880e11bd9a1009e8e7bb3c0ed1f1d927e4e4832\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8614211\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nAuto-Submit: Cole Faust \u003ccolefaust@google.com\u003e\nCommit-Queue: Cole Faust \u003ccolefaust@google.com\u003e\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "48b658d07af9d51b1a7077ff8e4cda8ba88a0cf0",
      "tree": "127f25d943f5c2bf243f0d548192ab73a54f2cd7",
      "parents": [
        "98bf05acefd4f9af79d4f07501253fad73e2c722"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Tue Oct 20 13:31:21 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 20 13:31:21 2026"
      },
      "message": "siso: gcc scandepsparams skips output flags\n\nIn gccutil.ExtractScanDepsParams, -o and -MF are not skipped in switch arg.\nWhen the -o argument ends in .mm, filepath.Ext(arg) matches it\nand adds the output file to res.Sources.\n\nWithout disable-ensure-output-dirs, that output directory exists in HashFS,\nso scandeps includes it in the input_root.\nWith disable-ensure-output-dirs, the output directory does not exist in\nHashFS, causing two phase caching misses.\n\nargument of -o etc should not be treated as source, so skip next args\nfor such arguments.\n\nBug: b/461917619\nChange-Id: I4bacec1c126b929a590796f7972b60a24842286b\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8610367\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "98bf05acefd4f9af79d4f07501253fad73e2c722",
      "tree": "f0bf77efb89b355921f439b1153e29c66fc7586e",
      "parents": [
        "4bd5cc456fb4c98e4820da1d8482288ec59f867e"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Tue Oct 20 05:20:22 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 20 05:20:22 2026"
      },
      "message": "[go] update toolchain go 1.27.2 -\u003e 1.27.3\n\nhttps://groups.google.com/g/golang-announce/c/66pojueaQek/m/tmWX2Pq9AgAJ\n\nChange-Id: I300f320dac955dd808d343e68adc5ccc87dcd98e\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8611187\nReviewed-by: Richard Wang \u003crichardwa@google.com\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Richard Wang \u003crichardwa@google.com\u003e\n"
    },
    {
      "commit": "4bd5cc456fb4c98e4820da1d8482288ec59f867e",
      "tree": "5e0fd593ab5707f8f5f7c428644342fb7cd1f345",
      "parents": [
        "25de01425f142d7ba86f8bcc3d9999e722083602"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Tue Oct 20 02:30:31 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Tue Oct 20 02:30:31 2026"
      },
      "message": "siso: show missing deps message for deps\u003dmsvc\n\nBug: b/575574842\nChange-Id: I0f41e1be68fffaf2755923b7601a625719dfdc3a\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8609550\nReviewed-by: Yuke Liao \u003cliaoyuke@google.com\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "25de01425f142d7ba86f8bcc3d9999e722083602",
      "tree": "18418167fb81e80ed2c0ce94af983d01f89246d0",
      "parents": [
        "146ec3de7c46e95cf7adac91927e2dd634047908"
      ],
      "author": {
        "name": "Cole Faust",
        "email": "colefaust@google.com",
        "time": "Mon Oct 19 22:24:37 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 19 22:24:37 2026"
      },
      "message": "Don\u0027t consider empty files changed with restat_content\n\nEmpty files should not be considered changed.\n\nThis is an attempt to work around actions that depend on\ntimestamp files, but the real solution to that is to\nenable action sandboxing, which will force you to depend\non all the files you need instead of using timestamp\nfiles as a proxy.\n\nBug: 561799494\nTest: go test\nChange-Id: I7e10b73516ca7b69fccb942f955e3df21034f3c7\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8491757\nAuto-Submit: Cole Faust \u003ccolefaust@google.com\u003e\nCommit-Queue: Cole Faust \u003ccolefaust@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "146ec3de7c46e95cf7adac91927e2dd634047908",
      "tree": "25f2a8aa779bdc45d0192c5d4ff925267eeaead9",
      "parents": [
        "efea3c1cce6f8d464daada8b8615a394abbf6175"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@chromium.org",
        "time": "Mon Oct 19 08:58:54 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 19 08:58:54 2026"
      },
      "message": "siso: wait for in-flight RPC handlers when stopping reapitest server\n\nSince bcf193fd (\"siso: detach CAS upload operations from the requesting\nstep\"), CAS uploads run on the reapi.Client\u0027s background uploader and\ncan outlive the step that requested them. When a test returns while a\nBatchUpdateBlobs RPC is already in flight on the fake REAPI server\n(e.g. TestRunRacing_LocalFailure_DoesNotWaitForRemote), testServer.Close\ncalled grpc.Server.Stop(), which by default returns without waiting for\nrunning RPC handlers to finish. The still-running BatchUpdateBlobs\nhandler could then create/rename files in cas/sha256 concurrently with\nt.TempDir\u0027s os.RemoveAll cleanup, failing with \"directory not empty\".\n\nPass grpc.WaitForHandlers(true) to grpc.NewServer in reapitest so that\nserv.Stop() waits for all in-flight RPC handlers to exit before\nreturning.\n\nBug: 575196094\nChange-Id: I31ae9bdb8a422bb0576c02212467280fb9cd8535\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8609448\nCommit-Queue: Takuto Ikuta \u003ctikuta@chromium.org\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nAuto-Submit: Takuto Ikuta \u003ctikuta@chromium.org\u003e\n"
    },
    {
      "commit": "efea3c1cce6f8d464daada8b8615a394abbf6175",
      "tree": "a8f4dc13636d827e2f28585b4682946ed2a6e0bd",
      "parents": [
        "5dff5f06371c86defce0cec1d377e771fca3190a"
      ],
      "author": {
        "name": "Yuke Liao",
        "email": "liaoyuke@google.com",
        "time": "Mon Oct 19 06:40:46 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 19 06:40:46 2026"
      },
      "message": "siso: snapshot pre-outputs on RBE cache hits for restat\n\nWhen a step configured with restat or restat_content hits the RBE\naction cache, pre-existing outputs were not recorded prior to applying\nthe cached result unless two-phase caching was active. Without the\npre-output snapshot, restat comparison had no baseline digests or\nmtimes to compare against and unconditionally marked outputs as\nchanged, forcing unnecessary rebuilds of downstream actions even when\noutput contents were identical.\n\nAdditionally, cloning a command for the local racer in racing execution\ncleared the pre-output snapshot instead of preserving it, losing the\nrestat baseline when the snapshot is recorded before dispatching the\nexecution strategy.\n\nRecord pre-outputs once before running the step\u0027s execution strategy\nwhen restat is enabled, and preserve the snapshot across command\nclones so all execution and cache-hit paths share a consistent baseline.\n\nBug: 561799494\nTest: go test ./build ./execute\nChange-Id: I52c7175c9c1b9266a43535243213e272e4b79a0a\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8602671\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Yuke Liao \u003cliaoyuke@google.com\u003e\n"
    },
    {
      "commit": "5dff5f06371c86defce0cec1d377e771fca3190a",
      "tree": "96c4ea783436a04915e67839c6ab24c93bdfe155",
      "parents": [
        "46b7d1380e5d038f228d0d1f8d59ed055ebccd42"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Mon Oct 19 02:10:55 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 19 02:10:55 2026"
      },
      "message": "upgraded github.com/ebitengine/purego v0.10.2 \u003d\u003e v0.11.2\n\nebitengine/purego v0.11.2 fixes crash by\nsignal 27 received on thread with no signal stack\n\nBug: b/478710493\nChange-Id: I42d05b5bc3dbae5800b473146d668a6c70d56f66\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8602670\nReviewed-by: Takuto Ikuta \u003ctikuta@chromium.org\u003e\nCommit-Queue: Fumitoshi Ukai \u003cukai@google.com\u003e\nCommit-Queue: Takuto Ikuta \u003ctikuta@chromium.org\u003e\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "46b7d1380e5d038f228d0d1f8d59ed055ebccd42",
      "tree": "eb41ae9e3465fd916959551723d95708d3711f24",
      "parents": [
        "7ab4814901b3c7afc2dddf2ed1a6ff238a0d85c5"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Mon Oct 19 01:23:27 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Mon Oct 19 01:23:27 2026"
      },
      "message": "siso: update version string to v1.6.7\n\nv1.6.6 is rolled out as pinned version at\ngit_revision:7ab4814901b3c7afc2dddf2ed1a6ff238a0d85c5\nhttps://crrev.com/c/8607647\nhttp://ag/43086542\n\nBug: b/572950292\nChange-Id: I7d987bce4415320a6fe64c5eaea9029450c16f60\nTAG\u003dagy\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8608927\nReviewed-by: Yuke Liao \u003cliaoyuke@google.com\u003e\nCommit-Queue: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "7ab4814901b3c7afc2dddf2ed1a6ff238a0d85c5",
      "tree": "d5fe05e10097f3d6d234a05c7cda4ee4237ebbc7",
      "parents": [
        "c8a256c7d897c47882151f0f3c303d97e0e3e4fd"
      ],
      "author": {
        "name": "Amith Dsouza",
        "email": "amithds@google.com",
        "time": "Fri Oct 16 17:02:51 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 16 17:02:51 2026"
      },
      "message": "siso: wait for remote when the local racer is killed by a signal\n\nWhen racing, a local racer killed by a signal (typically SIGKILL from\nthe kernel OOM killer; with the oom-score-adj experiment, local actions\nrun with oom_score_adj\u003d1000 so they are chosen before siso) was treated\nas the race winner. runRacing then canceled the in-flight remote\nexecution and failed the step, even though the remote racer was\nunaffected.\n\nIf the local racer finishes first because it was killed by a signal\n(exit\u003d-1 from localexec, or exit\u003d137 from sandbox wrappers such as\nnsjail), keep the remote racer running and use its result. If the\nremote racer fails too, apply the usual remote failure policy\n(remoteClaimFallbackIfAllowed) and run the step locally once more when\nallowed. Ordinary local failures, such as compile errors, still win the\nrace immediately.\n\nTAG\u003dagy\nCONV\u003d906a689f-ee03-4ec6-9a82-add0b950e2ce\n\nBug: b/571235311\nTest: go test ./build/ -run TestRunRacing -race\nChange-Id: Ibb132b258275de9fbf38bcea5fca66b67fe185b9\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8551236\nReviewed-by: Takuto Ikuta \u003ctikuta@chromium.org\u003e\nCommit-Queue: Amith Dsouza \u003camithds@google.com\u003e\nAuto-Submit: Amith Dsouza \u003camithds@google.com\u003e\n"
    },
    {
      "commit": "c8a256c7d897c47882151f0f3c303d97e0e3e4fd",
      "tree": "9fdc76cd4a2b0d34d9b2542379ff47f487bbaf4a",
      "parents": [
        "7f1b778c407810366c1b79bd5197e5e8a9cee871"
      ],
      "author": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Fri Oct 16 06:02:21 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 16 06:02:21 2026"
      },
      "message": "siso: reuse WalkDir\u0027s maps\n\nTwo phase caching walks a candidate\u0027s input tree on every lookup, and\neach WalkDir call built three fresh maps (dirs, waiting, known) that\ngrew as the walk went. Keep the maps in a sync.Pool and clear them for\nreuse. Maps that grew above 4k entries are dropped, so one huge tree\ndoes not keep their memory alive.\n\nMeasured on cached cf_x86_64_phone builds on ABFS, siso with and\nwithout this change (then with a 16k cap):\n\n                             before              after\n  dirs/waiting/known allocs  45 GB               3.6 GB\n  two phase caching lookups  81.3 s [78.9-86.1]  75.4 s [70.6-79.0]\n\nAllocations: one heap profile each on a 96-core cloudtop, of 440 GB\nallocated in total before. Lookups: from the first ready step until\n95% of the two phase caching hits have landed, mean [range] of 6\ninterleaved runs each on a 128-core cloudtop, leaving out one baseline\nrun with ~150 fewer cache hits; 6.0 ± 4.2 s (95% CI) sooner.\n\nChange-Id: I01c30110045a2dec97547de41e874153db21c69e\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8505798\nCommit-Queue: Neri Marschik \u003cnerima@google.com\u003e\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    },
    {
      "commit": "7f1b778c407810366c1b79bd5197e5e8a9cee871",
      "tree": "2e7ee74af20f0d1a23d254002422c431a897dde1",
      "parents": [
        "cecb410cd2fec4bb9254b8bed3e549fc635790a3"
      ],
      "author": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Fri Oct 16 06:02:11 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 16 06:02:11 2026"
      },
      "message": "siso: hash GetTree directories as received\n\nGetTree streams every directory without its digest, once for every\nplace it occurs in the tree, so WalkDir decoded, re-marshalled and\nhashed each copy. Receive each GetTreeResponse as grpc\u0027s buffer\nthrough a call-scoped codec, hash each directory\u0027s wire bytes, and\ndecode only the directories the walk waits for. Directories whose\nbytes match no listed digest fall back to decoding and re-hashing as\nbefore. The codec has an empty name so the call keeps the\ncontent-type \"application/grpc\"; RBE rejects\n\"application/grpc+proto\".\n\nOn a cached Android build (cf_x86_64_phone on ABFS), GetTree sends\n22.5M directories, 20.6M (92%) of them already known to the walk\n(repeated by the stream or taken from walkdirCache), all of which\nWalkDir used to decode, re-marshal and hash.\n\nMeasured with siso 1aa29e09 with and without this change, on cached\ncf_x86_64_phone builds on ABFS, alternating the two binaries. The time\nfrom the first ready step until 95% of the two phase caching hits have\nlanded, mean [range]:\n\n  machine            runs   before               after\n  96-core cloudtop   4 + 4  73.9 s [72.1-75.9]   66.9 s [65.3-68.4]\n  128-core cloudtop  6 + 6  82.5 s [80.7-88.1]   76.6 s [74.0-79.5]\n\nThat is 6.3 ± 2.2 s (95% CI) sooner.\n\nChange-Id: I7b6211bc8b17edf41cfbd7e53d0571d988ad82cd\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8503861\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\nCommit-Queue: Neri Marschik \u003cnerima@google.com\u003e\n"
    },
    {
      "commit": "cecb410cd2fec4bb9254b8bed3e549fc635790a3",
      "tree": "d1934d8cb0e55e40593f3a772eb1b79572424b62",
      "parents": [
        "e0074ecc716d743d8b4c1d52b38be670eee6d784"
      ],
      "author": {
        "name": "Neri Marschik",
        "email": "nerima@google.com",
        "time": "Fri Oct 16 06:01:36 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 16 06:01:36 2026"
      },
      "message": "siso: do not look up inputs under precomputed subtrees\n\nAndroid\u0027s C/C++ steps list every file of the clang toolchain as an\ninput (~6,600 per step, declared by Soong for action sandboxing), while\nthe toolchain also goes into the input root as a precomputed subtree,\nwhose inputs treeDigest ignores. inputTree still looked each of them up\nin HashFS, built a merkletree entry and sorted it. Drop inputs at or\nunder a precomputed subtree before the lookup: the input root digest is\nunchanged, and the step\u0027s Inputs are not, so local execution still sees\nevery file. Of overlapping subtrees, only those SetTree accepts count.\nNothing is dropped under a remote chroot, with remote_inputs, or if a\nsubtree name is invalid.\n\nMeasured on a 96-core cloudtop with siso alone on prebuilt ninja files,\nbuilding a fixed set of 36,355 C++ objects of a cached Android build\n(cf_x86_64_phone; all remote cache hits with the same action digests\neither way): the siso run takes 44.7-46.2 s (mean 45.6 s) instead of\n69.8-73.0 s (mean 71.9 s), 3 runs each.\n\nChange-Id: Ifa5912fdfb8803a4269c0c93822f11ce55043602\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8578777\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\nCommit-Queue: Neri Marschik \u003cnerima@google.com\u003e\n"
    },
    {
      "commit": "e0074ecc716d743d8b4c1d52b38be670eee6d784",
      "tree": "e656e507fb85b6f20ef36d801700d6e4d1890570",
      "parents": [
        "f4e0fdfeba1251fe15b74c9cc300efc513a4b568"
      ],
      "author": {
        "name": "Takuto Ikuta",
        "email": "tikuta@chromium.org",
        "time": "Fri Oct 16 05:09:58 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Fri Oct 16 05:09:58 2026"
      },
      "message": "siso: claim remote fallback only after receiving first race result\n\nPreviously in runRacing, the remote racer goroutine called\nb.remoteClaimFallbackIfAllowed and b.setupFallback before sending its\nresult to ch. This caused two issues:\n\n1. If the local racer finished first and won the race while the remote\n   racer failed just before observing raceCancel(), the remote goroutine\n   still incremented b.numFallback, logged a FALLBACK entry, and mutated\n   step.metrics and step.cmd concurrently with the main goroutine.\n2. Because raceRemoteFallback could be sent into ch by the remote\n   goroutine as the second result, if the local racer was canceled first\n   and remote failed second, winner became raceRemoteFallback, which hit\n   the default branch of switch winner.resultType (\"both sides canceled\")\n   instead of falling back or reporting the remote error.\n\nFix this by moving the remote fallback check out of the remote goroutine\nand running it in runRacing right after receiving the first result from\nch when first.resultType \u003d\u003d raceRemote \u0026\u0026 first.err !\u003d nil.\n\nTAG\u003dagy\nCONV\u003db2c24917-7a75-477d-bade-2445788fb85e\nBug: 571235311\nChange-Id: Ib15b452876449e9433dd89c1ffcff9513468e563\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8416705\nAuto-Submit: Takuto Ikuta \u003ctikuta@chromium.org\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "f4e0fdfeba1251fe15b74c9cc300efc513a4b568",
      "tree": "cc02cd32d8dd0fd29bfc583a1eac7a3eff132060",
      "parents": [
        "bcf193fd2b80d34d51db31c50d064c52fc96722b"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Thu Oct 15 09:39:21 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 15 09:39:21 2026"
      },
      "message": "siso: need to prepare output dirs\n\nif SISO_EXPERIMENTS\u003ddisable-ensure-output-dirs,\noutput dirs are not created at scheduling time,\nso need to create output dir at step start time.\n\nrestore prepareLocalOutdirs from https://crrev.com/c/5183297\n\nBug: b/461917619\nChange-Id: Ie9fecb9f7cd05e7ba381d741229da59eab831053\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8582467\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "bcf193fd2b80d34d51db31c50d064c52fc96722b",
      "tree": "f56dcfcadb9783231fafb4b69e424dfa12299034",
      "parents": [
        "f4adb97ffe7581f013b37882dd92f663f8434bd9"
      ],
      "author": {
        "name": "Junji Watanabe",
        "email": "jwata@google.com",
        "time": "Thu Oct 15 08:03:36 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 15 08:03:36 2026"
      },
      "message": "siso: detach CAS upload operations from the requesting step\n\nIn racing mode, when the local racer won while the remote racer was\nstill uploading inputs to the CAS, runRacing blocked until that upload\nfinished: uploads used the build context (so that race cancellation\nwould not poison the uploadOps shared via knownDigests), but runRacing\nhas to drain the remote goroutine before it can return.\n\nRun uploads independently of the steps that request them. UploadAll\nstill partitions blobs via knownDigests, but hands the new blobs as\none request to an uploader owned by the reapi.Client, which runs it\nunder the \"reapi-upload\" semaphore with the client\u0027s lifetime context.\nThe requester only waits, with its own ctx: canceling it stops the\nwait, while the request still completes the shared uploadOps for the\nother waiters. Client.Close cancels requests and waits for them.\n\nThe semaphore capacity is Limits.Upload (SISO_LIMITS\u003dupload\u003dN). It\ndefaults to 10*GOMAXPROCS, matching the remoteexec digest semaphore\nthat already bounds how many steps are in UploadAll, and is reported\nin SemaStats. Nested uploads from chunkUpload run inline and never\nwait on another request\u0027s op, to avoid deadlock under the semaphore.\n\nBug: 565765743\nChange-Id: I3d3877fc698ea271069d1fed9226eda4587dae0b\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8530786\nCommit-Queue: Junji Watanabe \u003cjwata@google.com\u003e\nReviewed-by: Fumitoshi Ukai \u003cukai@google.com\u003e\nAuto-Submit: Junji Watanabe \u003cjwata@google.com\u003e\n"
    },
    {
      "commit": "f4adb97ffe7581f013b37882dd92f663f8434bd9",
      "tree": "4e7b0c246f3e885f5d4c54bee5a42dda4ba79aac",
      "parents": [
        "f9cd3004701a196e58f0dd4dc4231aef504fc0b1"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Thu Oct 15 05:30:51 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 15 05:30:51 2026"
      },
      "message": "siso: fix typo for disable-ensure-output-dirs\n\nBug: b/461917619\nChange-Id: I16b0ed96ecef20c24eb2f12b131cf68d7bc7e503\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8582328\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "f9cd3004701a196e58f0dd4dc4231aef504fc0b1",
      "tree": "863dc6cafab81f98fd5d071ee4bc8a4d10f24725",
      "parents": [
        "f267db38f2afdf9aa2b31230a7bff19b0f76c855"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Thu Oct 15 05:03:19 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 15 05:03:19 2026"
      },
      "message": "siso: introduce SISO_EXPERIMENTS\u003ddisable-ensure-output-dirs\n\nSoong would not require ensure output directory b/461917619\n\nensureActionOutputDirs.run runs on a single background goroutine\nand executes os.MkdirAll(dir.OSPath(), 0755) on ABFS for every\nunique output parent directory across all 441,729 outputs!\nIt slows down in scheduling, nop build.\n\nBug: b/461917619, b/559843941\nChange-Id: Ic9b048568abc98df5a874d6db01e7f6814b8212c\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8576183\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "f267db38f2afdf9aa2b31230a7bff19b0f76c855",
      "tree": "4161845bc42151cb7ac44418fe7ec48b6b721845",
      "parents": [
        "76ef7de898ce466095310d748a9d3a48a4a1d43d"
      ],
      "author": {
        "name": "Fumitoshi Ukai",
        "email": "ukai@google.com",
        "time": "Thu Oct 15 02:52:27 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Thu Oct 15 02:52:27 2026"
      },
      "message": "siso: use replacePhony to expand :inputs\n\nsysroot provisioning target may be phony or include phony,\nso need to expand phony to create actual sysroot :headers\ninput deps used for scandeps\n\nBug: b/570710848\nChange-Id: Id4a3151e87d0c6cc85ab0a515de5a29d98554e04\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8547431\nAuto-Submit: Fumitoshi Ukai \u003cukai@google.com\u003e\nReviewed-by: Philipp Wollermann \u003cphilwo@google.com\u003e\nCommit-Queue: Fumitoshi Ukai \u003cukai@google.com\u003e\n"
    },
    {
      "commit": "76ef7de898ce466095310d748a9d3a48a4a1d43d",
      "tree": "fbb0591b219bde7c7f5e3ebc739700cdb230c64c",
      "parents": [
        "1a57612014f50a11d38c5b97945918dcc891ffe2"
      ],
      "author": {
        "name": "Richard Wang",
        "email": "richardwa@google.com",
        "time": "Wed Oct 14 07:38:53 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 14 07:38:53 2026"
      },
      "message": "siso: webui share step JSON between pages with steps-store.js\n\nThe step viewer table and aggregates pages both use the same data, and\nif we\u0027re going to start supporting client-side navigation then it\u0027s\ntime to cache them so there\u0027s no need for a second metrics load.\n\nStart simple by only caching one build at a time, if you swap builds\nthe other one gets evicted.\n\nFuture pages or components when you navigate around pages for the\nsame build can still remain fast.\n\nBug: 533258244\nChange-Id: I1f4ec0abd547415b92e910f8cb2a82c56a6a6964\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/8492291\nReviewed-by: Junji Watanabe \u003cjwata@google.com\u003e\nCommit-Queue: Richard Wang \u003crichardwa@google.com\u003e\n"
    },
    {
      "commit": "1a57612014f50a11d38c5b97945918dcc891ffe2",
      "tree": "8b0c99ea96c17fdb2561248f413a25e98980d8f9",
      "parents": [
        "9d9ce9322792d9a04dd66cffbe036bd5f0dc917f"
      ],
      "author": {
        "name": "Philipp Wollermann",
        "email": "philwo@google.com",
        "time": "Wed Oct 14 03:02:00 2026"
      },
      "committer": {
        "name": "LUCI CQ",
        "email": "infra-scoped@luci-project-accounts.iam.gserviceaccount.com",
        "time": "Wed Oct 14 03:02:00 2026"
      },
      "message": "kajiya: let each executor declare its concurrency cap\n\nThe execution service ran at most GOMAXPROCS actions at once, whatever\nthe executor. That suits local execution, which is CPU-bound, but it\nalso held the upstream proxy to one action per core while a client can\nkeep many times more in flight, so proxied actions queued for a local\nslot although the upstream schedules them on its own workers.\n\nAdd MaxParallelism to ExecutorInterface and size the service\u0027s\nexecution slots from it. The local executor keeps GOMAXPROCS, and the\nupstream proxy asks for no limit.\n\nChange-Id: I89d65695bba72dbca66ff46e8e832b1b3d69dee3\nReviewed-on: https://chromium-review.googlesource.com/c/build/+/7806554\nReviewed-by: Neri Marschik \u003cnerima@google.com\u003e\nCommit-Queue: Philipp Wollermann \u003cphilwo@google.com\u003e\n"
    }
  ],
  "next": "9d9ce9322792d9a04dd66cffbe036bd5f0dc917f"
}
