Debian Package Tracker
Register | Log in
Subscribe

siso

Ninja-compatible build system optimized for remote execution

Choose email to subscribe with

general
  • source: siso (main)
  • version: 1.6.7+ds-1
  • maintainer: Debian Go Packaging Team (DMD)
  • uploaders: Juan Manuel Méndez Rey (DMD) (DM)
  • arch: any
  • std-ver: 4.7.4
  • VCS: Git (Browse, QA)
versions [more versions can be listed by madison] [old versions available from snapshot.debian.org]
[pool directory]
  • unstable: 1.6.7+ds-1
versioned links
  • 1.6.4+ds-1: [.dsc, use dget on this link to retrieve source package] [changelog] [copyright] [rules] [control]
  • 1.6.7+ds-1: [.dsc, use dget on this link to retrieve source package] [changelog] [copyright] [rules] [control]
binaries
  • siso (1 bugs: 0, 1, 0, 0)
action needed
1 bug with a patch to review in the bug tracker normal
The bug tracker contains patches fixing 1 bug to review: include them, or remove the patch tag.
Created: 2026-09-02 Last update: 2026-11-03 02:30
55 new commits since last upload, is it time to release? normal
vcswatch reports that this package seems to have new commits in its VCS but has not yet updated debian/changelog. You should consider updating the Debian changelog and uploading this new version into the archive.

Here are the relevant commit logs:
commit 7abcabf3b68c75551be00751b36e79fd9cbf2c2b
Merge: 8ecf696 82fa3d5
Author: Juan Manuel Méndez Rey <juan.mendezr@proton.me>
Date:   Sun Nov 1 19:20:19 2026 +0000

    Merge branch 'debian/latest' into 'debian/latest'
    
    New upstream 1.6.7+ds; correct ppc64el PIE attribution
    
    See merge request go-team/packages/siso!11

commit 82fa3d582c44837758707899a695df5ed45da145
Merge: 84321f6 8ecf696
Author: Juan Manuel Méndez Rey <juan.mendezr@proton.me>
Date:   Sun Nov 1 20:15:04 2026 +0100

    Merge origin/debian/latest

commit 84321f640bee93674e762e65d2f80f7ea2abb9af
Author: Juan Manuel Méndez Rey <juan.mendezr@proton.me>
Date:   Sun Nov 1 19:29:02 2026 +0100

    Finalize changelog for 1.6.7+ds-1

commit 5970c7f93da84c07829743c700df756640b1c10c
Author: Juan Manuel Méndez Rey <juan.mendezr@proton.me>
Date:   Sun Nov 1 19:21:30 2026 +0100

    Package new upstream 1.6.7+ds

commit 8e8fdb19c97a852f5e885ca78d9dc7f207bbb934
Merge: 7914936 d8ada4c
Author: Juan Manuel Méndez Rey <juan.mendezr@proton.me>
Date:   Sun Nov 1 19:16:49 2026 +0100

    Update upstream source from tag 'upstream/1.6.7+ds'
    
    Update to upstream version '1.6.7+ds'
    with Debian dir be608e01b515bb680e1007d29bb9669178781028

commit d8ada4c06b08cfa751894868d9f940ee8f1d3be9
Merge: c9732ef dfc32e4
Author: Juan Manuel Méndez Rey <juan.mendezr@proton.me>
Date:   Sun Nov 1 19:16:48 2026 +0100

    New upstream version 1.6.7+ds

commit dfc32e4edca158cff2b64a1658ee3940f0116b3a
Author: Jihoon Kang <jihoonkang@google.com>
Date:   Thu Oct 22 17:42:59 2026 -0700

    siso: normalize "." REAPI working_directory so 2PC digests match
    
    When two-phase caching (2PC) is enabled, Builder.twoPhaseCachingLookup
    unconditionally sets step.cmd.CanonicalizeDir = false so that input
    roots can match local paths. This setting persists when remote action
    execution occurs after a 2PC cache miss.
    
    In REAPI, "" and "." are semantically equivalent (both represent the
    input root directory), but produce different Command proto serializations
    and digests. Android ABFS dev-warmup builds with 2PC had 0% action digest
    overlap with CI because working_directory was "." instead of "".
    
    Instead of mutating Siso's internal Path representation (where "." is
    the canonical non-empty relative root representation used across paths,
    casts, and Dir(), and New is unchanged), normalize "." to "" strictly
    at the REAPI boundary:
    - Introduce Cmd.WorkingDirectory() which normalizes "." to "" when
      building rpb.Command. RemoteChroot output remains unchanged as
      path.JoinRoot(root, "") and path.JoinRoot(root, ".") both return New(root).
      Use it in Cmd.CommandDigest when setting Command.working_directory.
    - Introduce Path.Equal to report whether two Paths are the same after
      canonicalization, treating "" and "." as the same root path.
    - Use Path.Equal in reapiTwoPhaseCaching.matchAction to compare
      step.cmd.WorkDir and cmd.GetWorkingDirectory(), preserving compatibility
      with existing cache entries recorded with ".".
    - Guard subcmd/recall against empty working_directory, as filepath.IsLocal("")
      is false and recall would otherwise reject commands with working_directory "".
    
    Keep TestCommandDigest_DotWorkDir, TestCommandDigest_NonRootWorkDir, and
    TestCommandDigest_RemoteChrootDotWorkDir as separate top-level tests with
    isolated hashFS instances and t.Context(), and add direct tests for
    Cmd.WorkingDirectory and Path.Equal.
    
    Bug: b/576384060
    Change-Id: I1f1332aac8a4f236d80e17c9684b56d80971068c
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8616931
    Reviewed-by: Fumitoshi Ukai <ukai@google.com>
    Commit-Queue: Jihoon Kang <jihoonkang@google.com>

commit 07dd00714f1ff29232e9b65e10b6bdf0df7d7c21
Author: Junji Watanabe <jwata@google.com>
Date:   Thu Oct 22 01:02:45 2026 -0700

    siso: preserve remote-only entries in .siso_fs_state during -t cleandead
    
    When siso ninja -t cleandead runs without -output_local_strategy,
    c.outputLocalStrategy defaults to "full", causing HashFS initNotExist
    to treat non-materialized remote outputs (from a prior greedy/minimum
    build) as missing locally-needed files and strip them when saving
    .siso_fs_state on exit.
    
    Since subtool "cleandead" only cleans dead generated files and does
    not materialize build outputs, set c.outputLocal to return false so
    remote-only entries in .siso_fs_state are preserved regardless of
    -output_local_strategy.
    
    Bug: 576369882
    Change-Id: Ief1d1b5add77ccd8e4aedaef4ee03bd58fa8af05
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8629287
    Reviewed-by: Fumitoshi Ukai <ukai@google.com>
    Commit-Queue: Junji Watanabe <jwata@google.com>
    Auto-Submit: Junji Watanabe <jwata@google.com>

commit 0dd1534d3e492132314afd7e60ef5c8bdbb3899b
Author: Junji Watanabe <jwata@google.com>
Date:   Thu Oct 22 00:48:24 2026 -0700

    siso: fix -cleandead flag overwritten by resolveFlags
    
    In crrev.com/c/7278456, resolveFlags was refactored to assign:
      c.cleandead, err = checkSubtool(c.subtool)
    When -cleandead is passed without -t cleandead, c.subtool is empty and
    checkSubtool("") returns (false, nil), overwriting c.cleandead back to
    false.
    
    Only set c.cleandead = true when checkSubtool returns true so the
    -cleandead flag is preserved.
    
    Bug: 576369882
    Change-Id: I2974afa648554a7fe3aac62846b4b3aa1da87243
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8629267
    Reviewed-by: Fumitoshi Ukai <ukai@google.com>
    Auto-Submit: Junji Watanabe <jwata@google.com>
    Commit-Queue: Junji Watanabe <jwata@google.com>

commit 46a923d6d6ef6cc063b94b4a039652ff29707a07
Author: Andrew Paseltiner <apaseltiner@google.com>
Date:   Wed Oct 21 06:16:15 2026 -0700

    siso: update target state cache in checkLocalOutputs
    
    When a step with a stale .siso_deps entry stats a pre-existing generated
    file in inputMtime before the local action that regenerates that file
    has executed, b.targets caches {mtime: old, changed: false} for the
    generated file.
    
    Unlike (*Builder).outputs, (*Builder).checkLocalOutputs did not update
    b.targets after local execution completed, leaving the stale
    changed=false entry in b.targets and causing downstream steps that
    genuinely depend on the regenerated file to skip rebuilding.
    
    Update b.targets in (*Builder).checkLocalOutputs for declared file and
    directory outputs. Also store dirtyErr in b.targets when walking a
    directory output fails in both (*Builder).checkLocalOutputs and
    (*Builder).outputs, matching inputMtime.
    
    Fixed: b/575838859
    Change-Id: Ie72decf3d685d21ccc1b7ed2c59f3359d923bd76
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8620378
    Commit-Queue: Andrew Paseltiner <apaseltiner@chromium.org>
    Reviewed-by: Fumitoshi Ukai <ukai@google.com>

commit 649804301f76355453dad74e151f7693dd2d8066
Author: Fumitoshi Ukai <ukai@google.com>
Date:   Tue Oct 20 16:55:24 2026 -0700

    siso: ensure parent directory for symlink before flush
    
    with SISO_EXPERIMENTS=disable-ensure-output-dirs,
    cache result of step generates symlink would fail
    since parent directory of symlink output doesn't exist
    and local fallbacks.
    
    ensure parent directory for symlink exists before flush it.
    
    Bug: b/461917619
    Change-Id: Id7dbb91bdcd61254505cc9aac7d9546c3c7df5ea
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8602173
    Auto-Submit: Fumitoshi Ukai <ukai@google.com>
    Commit-Queue: Fumitoshi Ukai <ukai@google.com>
    Reviewed-by: Junji Watanabe <jwata@google.com>

commit 9b0ad4285e3d00523cb74f0f39b62739970a01b3
Author: Cole Faust <colefaust@google.com>
Date:   Tue Oct 20 14:25:14 2026 -0700

    Remove restat-content-applies-to-empty-files experiment
    
    We want this to always be the behavior.
    
    Bug: 561799494
    Test: go test
    Change-Id: I1880e11bd9a1009e8e7bb3c0ed1f1d927e4e4832
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8614211
    Reviewed-by: Junji Watanabe <jwata@google.com>
    Auto-Submit: Cole Faust <colefaust@google.com>
    Commit-Queue: Cole Faust <colefaust@google.com>
    Reviewed-by: Philipp Wollermann <philwo@google.com>

commit 48b658d07af9d51b1a7077ff8e4cda8ba88a0cf0
Author: Fumitoshi Ukai <ukai@google.com>
Date:   Tue Oct 20 06:31:21 2026 -0700

    siso: gcc scandepsparams skips output flags
    
    In gccutil.ExtractScanDepsParams, -o and -MF are not skipped in switch arg.
    When the -o argument ends in .mm, filepath.Ext(arg) matches it
    and adds the output file to res.Sources.
    
    Without disable-ensure-output-dirs, that output directory exists in HashFS,
    so scandeps includes it in the input_root.
    With disable-ensure-output-dirs, the output directory does not exist in
    HashFS, causing two phase caching misses.
    
    argument of -o etc should not be treated as source, so skip next args
    for such arguments.
    
    Bug: b/461917619
    Change-Id: I4bacec1c126b929a590796f7972b60a24842286b
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8610367
    Commit-Queue: Junji Watanabe <jwata@google.com>
    Auto-Submit: Fumitoshi Ukai <ukai@google.com>
    Reviewed-by: Junji Watanabe <jwata@google.com>

commit 98bf05acefd4f9af79d4f07501253fad73e2c722
Author: Fumitoshi Ukai <ukai@google.com>
Date:   Mon Oct 19 22:20:22 2026 -0700

    [go] update toolchain go 1.27.2 -> 1.27.3
    
    https://groups.google.com/g/golang-announce/c/66pojueaQek/m/tmWX2Pq9AgAJ
    
    Change-Id: I300f320dac955dd808d343e68adc5ccc87dcd98e
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8611187
    Reviewed-by: Richard Wang <richardwa@google.com>
    Auto-Submit: Fumitoshi Ukai <ukai@google.com>
    Commit-Queue: Richard Wang <richardwa@google.com>

commit 4bd5cc456fb4c98e4820da1d8482288ec59f867e
Author: Fumitoshi Ukai <ukai@google.com>
Date:   Mon Oct 19 19:30:31 2026 -0700

    siso: show missing deps message for deps=msvc
    
    Bug: b/575574842
    Change-Id: I0f41e1be68fffaf2755923b7601a625719dfdc3a
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8609550
    Reviewed-by: Yuke Liao <liaoyuke@google.com>
    Auto-Submit: Fumitoshi Ukai <ukai@google.com>
    Reviewed-by: Junji Watanabe <jwata@google.com>
    Commit-Queue: Fumitoshi Ukai <ukai@google.com>

commit 25de01425f142d7ba86f8bcc3d9999e722083602
Author: Cole Faust <colefaust@google.com>
Date:   Mon Oct 19 15:24:37 2026 -0700

    Don't consider empty files changed with restat_content
    
    Empty files should not be considered changed.
    
    This is an attempt to work around actions that depend on
    timestamp files, but the real solution to that is to
    enable action sandboxing, which will force you to depend
    on all the files you need instead of using timestamp
    files as a proxy.
    
    Bug: 561799494
    Test: go test
    Change-Id: I7e10b73516ca7b69fccb942f955e3df21034f3c7
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8491757
    Auto-Submit: Cole Faust <colefaust@google.com>
    Commit-Queue: Cole Faust <colefaust@google.com>
    Reviewed-by: Junji Watanabe <jwata@google.com>
    Reviewed-by: Philipp Wollermann <philwo@google.com>

commit 146ec3de7c46e95cf7adac91927e2dd634047908
Author: Takuto Ikuta <tikuta@chromium.org>
Date:   Mon Oct 19 01:58:54 2026 -0700

    siso: wait for in-flight RPC handlers when stopping reapitest server
    
    Since bcf193fd ("siso: detach CAS upload operations from the requesting
    step"), CAS uploads run on the reapi.Client's background uploader and
    can outlive the step that requested them. When a test returns while a
    BatchUpdateBlobs RPC is already in flight on the fake REAPI server
    (e.g. TestRunRacing_LocalFailure_DoesNotWaitForRemote), testServer.Close
    called grpc.Server.Stop(), which by default returns without waiting for
    running RPC handlers to finish. The still-running BatchUpdateBlobs
    handler could then create/rename files in cas/sha256 concurrently with
    t.TempDir's os.RemoveAll cleanup, failing with "directory not empty".
    
    Pass grpc.WaitForHandlers(true) to grpc.NewServer in reapitest so that
    serv.Stop() waits for all in-flight RPC handlers to exit before
    returning.
    
    Bug: 575196094
    Change-Id: I31ae9bdb8a422bb0576c02212467280fb9cd8535
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8609448
    Commit-Queue: Takuto Ikuta <tikuta@chromium.org>
    Reviewed-by: Fumitoshi Ukai <ukai@google.com>
    Auto-Submit: Takuto Ikuta <tikuta@chromium.org>

commit efea3c1cce6f8d464daada8b8615a394abbf6175
Author: Yuke Liao <liaoyuke@google.com>
Date:   Sun Oct 18 23:40:46 2026 -0700

    siso: snapshot pre-outputs on RBE cache hits for restat
    
    When a step configured with restat or restat_content hits the RBE
    action cache, pre-existing outputs were not recorded prior to applying
    the cached result unless two-phase caching was active. Without the
    pre-output snapshot, restat comparison had no baseline digests or
    mtimes to compare against and unconditionally marked outputs as
    changed, forcing unnecessary rebuilds of downstream actions even when
    output contents were identical.
    
    Additionally, cloning a command for the local racer in racing execution
    cleared the pre-output snapshot instead of preserving it, losing the
    restat baseline when the snapshot is recorded before dispatching the
    execution strategy.
    
    Record pre-outputs once before running the step's execution strategy
    when restat is enabled, and preserve the snapshot across command
    clones so all execution and cache-hit paths share a consistent baseline.
    
    Bug: 561799494
    Test: go test ./build ./execute
    Change-Id: I52c7175c9c1b9266a43535243213e272e4b79a0a
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8602671
    Reviewed-by: Fumitoshi Ukai <ukai@google.com>
    Commit-Queue: Yuke Liao <liaoyuke@google.com>

commit 5dff5f06371c86defce0cec1d377e771fca3190a
Author: Fumitoshi Ukai <ukai@google.com>
Date:   Sun Oct 18 19:10:55 2026 -0700

    upgraded github.com/ebitengine/purego v0.10.2 => v0.11.2
    
    ebitengine/purego v0.11.2 fixes crash by
    signal 27 received on thread with no signal stack
    
    Bug: b/478710493
    Change-Id: I42d05b5bc3dbae5800b473146d668a6c70d56f66
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8602670
    Reviewed-by: Takuto Ikuta <tikuta@chromium.org>
    Commit-Queue: Fumitoshi Ukai <ukai@google.com>
    Commit-Queue: Takuto Ikuta <tikuta@chromium.org>
    Auto-Submit: Fumitoshi Ukai <ukai@google.com>

commit 46b7d1380e5d038f228d0d1f8d59ed055ebccd42
Author: Fumitoshi Ukai <ukai@google.com>
Date:   Sun Oct 18 18:23:27 2026 -0700

    siso: update version string to v1.6.7
    
    v1.6.6 is rolled out as pinned version at
    git_revision:7ab4814901b3c7afc2dddf2ed1a6ff238a0d85c5
    https://crrev.com/c/8607647
    http://ag/43086542
    
    Bug: b/572950292
    Change-Id: I7d987bce4415320a6fe64c5eaea9029450c16f60
    TAG=agy
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8608927
    Reviewed-by: Yuke Liao <liaoyuke@google.com>
    Commit-Queue: Fumitoshi Ukai <ukai@google.com>

commit 79149362158c3587d200994bb38f222e8966df95
Author: Juan Manuel Méndez Rey <juan.mendezr@proton.me>
Date:   Sat Oct 17 18:15:00 2026 +0200

    ppc64el: build without -buildmode=pie until golang-1.27 is fixed
    
    Go 1.27 produces ppc64el PIE binaries that die at startup, so the 'siso man' step in override_dh_auto_build could not run and the package FTBFS on that arch. The fault is in the toolchain, not in siso: the same source builds and runs fine without -buildmode=pie, and 1.5.x built fine on ppc64el under golang-1.26.
    
    Scoped to ppc64el only; every other architecture keeps PIE hardening. Verified with clean sbuilds: ppc64el Status: successful, amd64 Status: successful with -buildmode=pie. Drop the conditional and restore -buildmode=pie everywhere once golang-1.27 is fixed.

commit bb5ab7b2e5ab10377590fd5a5e6a00d8dfc099b5
Author: Juan Manuel Méndez Rey <juan.mendezr@proton.me>
Date:   Sat Oct 17 15:30:46 2026 +0200

    Package new upstream 1.6.5+ds
    
    Upstream siso/go.mod now declares go 1.27.2, so bump the golang-any Build-Depends from (>= 2:1.26~) to (>= 2:1.27~). All five quilt patches apply unchanged, and siso/subcmd/man is still not upstream, so patch 0003 stays.
    
    Not uploadable yet: 1.6.5 still fails to build on ppc64el with golang-1.27 (the freshly built binary crashes at startup, so the man page step in override_dh_auto_build fails).

commit 59084c27af383573c3154977eee6ad970065fbfb
Merge: 7cc2d5a c9732ef
Author: Juan Manuel Méndez Rey <juan.mendezr@proton.me>
Date:   Sat Oct 17 14:16:35 2026 +0200

    Update upstream source from tag 'upstream/1.6.5+ds'
    
    Update to upstream version '1.6.5+ds'
    with Debian dir 5bf7d9942a38b6d2f7d19296bedf2b26ed15f60d

commit c9732ef298678cab8c13146f2f0ff68626714d6a
Author: Juan Manuel Méndez Rey <juan.mendezr@proton.me>
Date:   Sat Oct 17 14:16:34 2026 +0200

    New upstream version 1.6.5+ds

commit 7ab4814901b3c7afc2dddf2ed1a6ff238a0d85c5
Author: Amith Dsouza <amithds@google.com>
Date:   Fri Oct 16 10:02:51 2026 -0700

    siso: wait for remote when the local racer is killed by a signal
    
    When racing, a local racer killed by a signal (typically SIGKILL from
    the kernel OOM killer; with the oom-score-adj experiment, local actions
    run with oom_score_adj=1000 so they are chosen before siso) was treated
    as the race winner. runRacing then canceled the in-flight remote
    execution and failed the step, even though the remote racer was
    unaffected.
    
    If the local racer finishes first because it was killed by a signal
    (exit=-1 from localexec, or exit=137 from sandbox wrappers such as
    nsjail), keep the remote racer running and use its result. If the
    remote racer fails too, apply the usual remote failure policy
    (remoteClaimFallbackIfAllowed) and run the step locally once more when
    allowed. Ordinary local failures, such as compile errors, still win the
    race immediately.
    
    TAG=agy
    CONV=906a689f-ee03-4ec6-9a82-add0b950e2ce
    
    Bug: b/571235311
    Test: go test ./build/ -run TestRunRacing -race
    Change-Id: Ibb132b258275de9fbf38bcea5fca66b67fe185b9
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8551236
    Reviewed-by: Takuto Ikuta <tikuta@chromium.org>
    Commit-Queue: Amith Dsouza <amithds@google.com>
    Auto-Submit: Amith Dsouza <amithds@google.com>

commit c8a256c7d897c47882151f0f3c303d97e0e3e4fd
Author: Neri Marschik <nerima@google.com>
Date:   Thu Oct 15 23:02:21 2026 -0700

    siso: reuse WalkDir's maps
    
    Two phase caching walks a candidate's input tree on every lookup, and
    each WalkDir call built three fresh maps (dirs, waiting, known) that
    grew as the walk went. Keep the maps in a sync.Pool and clear them for
    reuse. Maps that grew above 4k entries are dropped, so one huge tree
    does not keep their memory alive.
    
    Measured on cached cf_x86_64_phone builds on ABFS, siso with and
    without this change (then with a 16k cap):
    
                                 before              after
      dirs/waiting/known allocs  45 GB               3.6 GB
      two phase caching lookups  81.3 s [78.9-86.1]  75.4 s [70.6-79.0]
    
    Allocations: one heap profile each on a 96-core cloudtop, of 440 GB
    allocated in total before. Lookups: from the first ready step until
    95% of the two phase caching hits have landed, mean [range] of 6
    interleaved runs each on a 128-core cloudtop, leaving out one baseline
    run with ~150 fewer cache hits; 6.0 ± 4.2 s (95% CI) sooner.
    
    Change-Id: I01c30110045a2dec97547de41e874153db21c69e
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8505798
    Commit-Queue: Neri Marschik <nerima@google.com>
    Reviewed-by: Philipp Wollermann <philwo@google.com>

commit 7f1b778c407810366c1b79bd5197e5e8a9cee871
Author: Neri Marschik <nerima@google.com>
Date:   Thu Oct 15 23:02:11 2026 -0700

    siso: hash GetTree directories as received
    
    GetTree streams every directory without its digest, once for every
    place it occurs in the tree, so WalkDir decoded, re-marshalled and
    hashed each copy. Receive each GetTreeResponse as grpc's buffer
    through a call-scoped codec, hash each directory's wire bytes, and
    decode only the directories the walk waits for. Directories whose
    bytes match no listed digest fall back to decoding and re-hashing as
    before. The codec has an empty name so the call keeps the
    content-type "application/grpc"; RBE rejects
    "application/grpc+proto".
    
    On a cached Android build (cf_x86_64_phone on ABFS), GetTree sends
    22.5M directories, 20.6M (92%) of them already known to the walk
    (repeated by the stream or taken from walkdirCache), all of which
    WalkDir used to decode, re-marshal and hash.
    
    Measured with siso 1aa29e09 with and without this change, on cached
    cf_x86_64_phone builds on ABFS, alternating the two binaries. The time
    from the first ready step until 95% of the two phase caching hits have
    landed, mean [range]:
    
      machine            runs   before               after
      96-core cloudtop   4 + 4  73.9 s [72.1-75.9]   66.9 s [65.3-68.4]
      128-core cloudtop  6 + 6  82.5 s [80.7-88.1]   76.6 s [74.0-79.5]
    
    That is 6.3 ± 2.2 s (95% CI) sooner.
    
    Change-Id: I7b6211bc8b17edf41cfbd7e53d0571d988ad82cd
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8503861
    Reviewed-by: Philipp Wollermann <philwo@google.com>
    Commit-Queue: Neri Marschik <nerima@google.com>

commit cecb410cd2fec4bb9254b8bed3e549fc635790a3
Author: Neri Marschik <nerima@google.com>
Date:   Thu Oct 15 23:01:36 2026 -0700

    siso: do not look up inputs under precomputed subtrees
    
    Android's C/C++ steps list every file of the clang toolchain as an
    input (~6,600 per step, declared by Soong for action sandboxing), while
    the toolchain also goes into the input root as a precomputed subtree,
    whose inputs treeDigest ignores. inputTree still looked each of them up
    in HashFS, built a merkletree entry and sorted it. Drop inputs at or
    under a precomputed subtree before the lookup: the input root digest is
    unchanged, and the step's Inputs are not, so local execution still sees
    every file. Of overlapping subtrees, only those SetTree accepts count.
    Nothing is dropped under a remote chroot, with remote_inputs, or if a
    subtree name is invalid.
    
    Measured on a 96-core cloudtop with siso alone on prebuilt ninja files,
    building a fixed set of 36,355 C++ objects of a cached Android build
    (cf_x86_64_phone; all remote cache hits with the same action digests
    either way): the siso run takes 44.7-46.2 s (mean 45.6 s) instead of
    69.8-73.0 s (mean 71.9 s), 3 runs each.
    
    Change-Id: Ifa5912fdfb8803a4269c0c93822f11ce55043602
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8578777
    Reviewed-by: Philipp Wollermann <philwo@google.com>
    Commit-Queue: Neri Marschik <nerima@google.com>

commit e0074ecc716d743d8b4c1d52b38be670eee6d784
Author: Takuto Ikuta <tikuta@chromium.org>
Date:   Thu Oct 15 22:09:58 2026 -0700

    siso: claim remote fallback only after receiving first race result
    
    Previously in runRacing, the remote racer goroutine called
    b.remoteClaimFallbackIfAllowed and b.setupFallback before sending its
    result to ch. This caused two issues:
    
    1. If the local racer finished first and won the race while the remote
       racer failed just before observing raceCancel(), the remote goroutine
       still incremented b.numFallback, logged a FALLBACK entry, and mutated
       step.metrics and step.cmd concurrently with the main goroutine.
    2. Because raceRemoteFallback could be sent into ch by the remote
       goroutine as the second result, if the local racer was canceled first
       and remote failed second, winner became raceRemoteFallback, which hit
       the default branch of switch winner.resultType ("both sides canceled")
       instead of falling back or reporting the remote error.
    
    Fix this by moving the remote fallback check out of the remote goroutine
    and running it in runRacing right after receiving the first result from
    ch when first.resultType == raceRemote && first.err != nil.
    
    TAG=agy
    CONV=b2c24917-7a75-477d-bade-2445788fb85e
    Bug: 571235311
    Change-Id: Ib15b452876449e9433dd89c1ffcff9513468e563
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8416705
    Auto-Submit: Takuto Ikuta <tikuta@chromium.org>
    Reviewed-by: Junji Watanabe <jwata@google.com>
    Commit-Queue: Junji Watanabe <jwata@google.com>

commit f4e0fdfeba1251fe15b74c9cc300efc513a4b568
Author: Fumitoshi Ukai <ukai@google.com>
Date:   Thu Oct 15 02:39:21 2026 -0700

    siso: need to prepare output dirs
    
    if SISO_EXPERIMENTS=disable-ensure-output-dirs,
    output dirs are not created at scheduling time,
    so need to create output dir at step start time.
    
    restore prepareLocalOutdirs from https://crrev.com/c/5183297
    
    Bug: b/461917619
    Change-Id: Ie9fecb9f7cd05e7ba381d741229da59eab831053
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8582467
    Auto-Submit: Fumitoshi Ukai <ukai@google.com>
    Reviewed-by: Junji Watanabe <jwata@google.com>
    Commit-Queue: Junji Watanabe <jwata@google.com>

commit bcf193fd2b80d34d51db31c50d064c52fc96722b
Author: Junji Watanabe <jwata@google.com>
Date:   Thu Oct 15 01:03:36 2026 -0700

    siso: detach CAS upload operations from the requesting step
    
    In racing mode, when the local racer won while the remote racer was
    still uploading inputs to the CAS, runRacing blocked until that upload
    finished: uploads used the build context (so that race cancellation
    would not poison the uploadOps shared via knownDigests), but runRacing
    has to drain the remote goroutine before it can return.
    
    Run uploads independently of the steps that request them. UploadAll
    still partitions blobs via knownDigests, but hands the new blobs as
    one request to an uploader owned by the reapi.Client, which runs it
    under the "reapi-upload" semaphore with the client's lifetime context.
    The requester only waits, with its own ctx: canceling it stops the
    wait, while the request still completes the shared uploadOps for the
    other waiters. Client.Close cancels requests and waits for them.
    
    The semaphore capacity is Limits.Upload (SISO_LIMITS=upload=N). It
    defaults to 10*GOMAXPROCS, matching the remoteexec digest semaphore
    that already bounds how many steps are in UploadAll, and is reported
    in SemaStats. Nested uploads from chunkUpload run inline and never
    wait on another request's op, to avoid deadlock under the semaphore.
    
    Bug: 565765743
    Change-Id: I3d3877fc698ea271069d1fed9226eda4587dae0b
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8530786
    Commit-Queue: Junji Watanabe <jwata@google.com>
    Reviewed-by: Fumitoshi Ukai <ukai@google.com>
    Auto-Submit: Junji Watanabe <jwata@google.com>

commit f4adb97ffe7581f013b37882dd92f663f8434bd9
Author: Fumitoshi Ukai <ukai@google.com>
Date:   Wed Oct 14 22:30:51 2026 -0700

    siso: fix typo for disable-ensure-output-dirs
    
    Bug: b/461917619
    Change-Id: I16b0ed96ecef20c24eb2f12b131cf68d7bc7e503
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8582328
    Auto-Submit: Fumitoshi Ukai <ukai@google.com>
    Reviewed-by: Junji Watanabe <jwata@google.com>
    Commit-Queue: Fumitoshi Ukai <ukai@google.com>

commit f9cd3004701a196e58f0dd4dc4231aef504fc0b1
Author: Fumitoshi Ukai <ukai@google.com>
Date:   Wed Oct 14 22:03:19 2026 -0700

    siso: introduce SISO_EXPERIMENTS=disable-ensure-output-dirs
    
    Soong would not require ensure output directory b/461917619
    
    ensureActionOutputDirs.run runs on a single background goroutine
    and executes os.MkdirAll(dir.OSPath(), 0755) on ABFS for every
    unique output parent directory across all 441,729 outputs!
    It slows down in scheduling, nop build.
    
    Bug: b/461917619, b/559843941
    Change-Id: Ic9b048568abc98df5a874d6db01e7f6814b8212c
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8576183
    Auto-Submit: Fumitoshi Ukai <ukai@google.com>
    Reviewed-by: Junji Watanabe <jwata@google.com>
    Commit-Queue: Fumitoshi Ukai <ukai@google.com>

commit f267db38f2afdf9aa2b31230a7bff19b0f76c855
Author: Fumitoshi Ukai <ukai@google.com>
Date:   Wed Oct 14 19:52:27 2026 -0700

    siso: use replacePhony to expand :inputs
    
    sysroot provisioning target may be phony or include phony,
    so need to expand phony to create actual sysroot :headers
    input deps used for scandeps
    
    Bug: b/570710848
    Change-Id: Id4a3151e87d0c6cc85ab0a515de5a29d98554e04
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8547431
    Auto-Submit: Fumitoshi Ukai <ukai@google.com>
    Reviewed-by: Philipp Wollermann <philwo@google.com>
    Commit-Queue: Fumitoshi Ukai <ukai@google.com>

commit 76ef7de898ce466095310d748a9d3a48a4a1d43d
Author: Richard Wang <richardwa@google.com>
Date:   Wed Oct 14 00:38:53 2026 -0700

    siso: webui share step JSON between pages with steps-store.js
    
    The step viewer table and aggregates pages both use the same data, and
    if we're going to start supporting client-side navigation then it's
    time to cache them so there's no need for a second metrics load.
    
    Start simple by only caching one build at a time, if you swap builds
    the other one gets evicted.
    
    Future pages or components when you navigate around pages for the
    same build can still remain fast.
    
    Bug: 533258244
    Change-Id: I1f4ec0abd547415b92e910f8cb2a82c56a6a6964
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8492291
    Reviewed-by: Junji Watanabe <jwata@google.com>
    Commit-Queue: Richard Wang <richardwa@google.com>

commit 1a57612014f50a11d38c5b97945918dcc891ffe2
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 20:02:00 2026 -0700

    kajiya: let each executor declare its concurrency cap
    
    The execution service ran at most GOMAXPROCS actions at once, whatever
    the executor. That suits local execution, which is CPU-bound, but it
    also held the upstream proxy to one action per core while a client can
    keep many times more in flight, so proxied actions queued for a local
    slot although the upstream schedules them on its own workers.
    
    Add MaxParallelism to ExecutorInterface and size the service's
    execution slots from it. The local executor keeps GOMAXPROCS, and the
    upstream proxy asks for no limit.
    
    Change-Id: I89d65695bba72dbca66ff46e8e832b1b3d69dee3
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/7806554
    Reviewed-by: Neri Marschik <nerima@google.com>
    Commit-Queue: Philipp Wollermann <philwo@google.com>

commit 9d9ce9322792d9a04dd66cffbe036bd5f0dc917f
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 19:49:57 2026 -0700

    kajiya: add RBE upstream proxy execution mode
    
    A build that uses a remote execution service such as RBE pays a
    wide-area round trip for every action cache lookup and blob transfer,
    while Kajiya can only run actions on the local machine. Add a mode,
    enabled with -upstream_proxy, that forwards Execute to an upstream REAPI
    service and keeps the CAS and action cache local: Kajiya uploads the
    inputs the upstream lacks and downloads the outputs, so a repeated
    action is served from its local action cache without contacting the
    upstream. In this mode, ExecutionCapabilities.digest_functions lists
    only the functions negotiated with the upstream; the cache keeps serving
    all configured functions.
    
    Change-Id: I47c946d438eb9f0b001f3e88be37dc3e0bbca745
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/7806069
    Commit-Queue: Philipp Wollermann <philwo@google.com>
    Reviewed-by: Neri Marschik <nerima@google.com>

commit b0495fab487b58488fb89fd72718d1201443bd31
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 19:49:37 2026 -0700

    kajiya: pass skip_cache_lookup to executors
    
    Executors see only the model.Action that the service loads from the
    Action proto, but an executor that forwards actions to a remote service
    must honor the request's skip_cache_lookup by skipping the remote action
    cache too.
    
    Record skip_cache_lookup in the model.Action. Merged requests share one
    execution and the Action of the request that started it, so merge
    requests only when they agree on skip_cache_lookup: REAPI requires that
    a request with it set gets a result that was not visible before the
    request was sent.
    
    Change-Id: Idd8efd64e065b292dfc975be0ade5b28d9233833
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8561834
    Reviewed-by: Neri Marschik <nerima@google.com>
    Commit-Queue: Philipp Wollermann <philwo@google.com>

commit 22025a2c748c69d9b5bbf69bdf8059629b82fa8b
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 19:49:23 2026 -0700

    kajiya: accept TreeDigest in cached ActionResult validation
    
    The action cache's startup validation rejected every output directory
    with a TreeDigest, but the local executor reports output directories
    only by TreeDigest. Once the cache held such a result, validation failed
    on the next start and Kajiya refused to start.
    
    Accept TreeDigest, RootDirectoryDigest, or both, as REAPI allows. For a
    TreeDigest, check the Tree blob and the files that it lists.
    
    Change-Id: I311bd4e737d0c29779aca38ea20a7fd5274c1caf
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8561833
    Reviewed-by: Neri Marschik <nerima@google.com>
    Commit-Queue: Philipp Wollermann <philwo@google.com>

commit e4a228db520dc6a275e923ba3a78f928b2915f49
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 19:47:55 2026 -0700

    kajiya: don't crash on batch blobs without a digest
    
    With -max_batch_total_size_bytes set, BatchUpdateBlobs added up the
    blobs' sizes before it parsed their digests, and dereferenced the digest
    of a blob that had none. One such request crashed the server, because
    no interceptor recovers from a panic in a handler. BatchReadBlobs had
    the same dereference for in-process callers.
    
    Add up the sizes with the protobuf getters, so that a blob without a
    digest counts as empty there and fails the digest check as
    INVALID_ARGUMENT.
    
    Change-Id: I6a0db66bdbc70532f5700c3afecb1d5a5feed62b
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8561832
    Reviewed-by: Neri Marschik <nerima@google.com>
    Commit-Queue: Philipp Wollermann <philwo@google.com>

commit d7a5b0968307a75705e3eb12ee78c9cf00b0dfb2
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 19:47:48 2026 -0700

    kajiya: report real mtimes for FuseFS inputs without one
    
    Siso sends no NodeProperties for inputs. Under the FuseFS sandbox, such
    a file reported an mtime in year 1, and such a directory reported the
    Unix epoch. Python's datetime.fromtimestamp raises on year 1, and
    zipfile rejects any timestamp before 1980, so tools that read input
    mtimes failed.
    
    Report the CAS blob's mtime for a file, which the other sandboxes show
    through their hard links to the CAS, and the registration time for a
    directory, as a directory created for the sandbox would show.
    
    Change-Id: I7c13e844cb1df69d8c6123927962f1e3e66e2fe9
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8561831
    Reviewed-by: Neri Marschik <nerima@google.com>
    Commit-Queue: Philipp Wollermann <philwo@google.com>

commit 1660a5f9fa1c7853e47618d25917954ec53a3eb2
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 19:47:41 2026 -0700

    kajiya: keep identical FuseFS input files independent
    
    With the FuseFS sandbox, input files with the same content shared one
    inode. That inode reported the mode and mtime of whichever path
    registered it first, in any sandbox, so an executable input could lose
    its execute bits. Since the inode also reported no links, overlayfs
    took all its paths in one sandbox for the same file: a write to one of
    them showed through the others.
    
    Share a file inode only among paths with the same attributes, and
    report two links. overlayfs then gives each path an inode of its own
    and breaks the link on copy-up, as it does for the CAS hard links that
    the OverlayFS sandbox uses. Actions see a link count of 2 instead of 0
    on input files.
    
    Change-Id: I0ddfb3167ac9c264d60940a2893b303cf763fb69
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8561830
    Reviewed-by: Neri Marschik <nerima@google.com>
    Commit-Queue: Philipp Wollermann <philwo@google.com>

commit 99e16c923a665c2819cc98b2c49966571ec59b24
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 19:40:34 2026 -0700

    kajiya: fix ESTALE on a FuseFS input directory at two paths
    
    With the FuseFS sandbox, an action whose input root holds the same
    directory at two paths failed with "Stale file handle" once one of the
    paths had an upper directory, for example when two empty directories
    each hold a declared output. FuseFS cached directory inodes by digest
    and served one at every path with that digest, in every sandbox. The
    kernel keeps one dentry per directory inode and moves it to each path
    that is looked up. overlayfs gives all paths of one lower directory a
    single inode, whose upper directory can belong to only one of them.
    
    Create a directory inode for each path in each sandbox, and share only
    file inodes, which may have any number of names. When unregistering a
    sandbox, unlink its files from the shared inodes and invalidate its
    dentries, so that neither go-fuse nor the kernel keeps its directories
    alive.
    
    BenchmarkFuseE2E gives every sandbox the same 65536-file directory,
    the best case for the digest cache. About 60% of the slowdown is
    linking every file into each sandbox. The rest is rereading files
    whose page cache the kernel drops with the sandbox's dentries, about
    900 READs per op (AMD Ryzen 9 9950X3D, 32 parallel workers, medians
    of 8 runs):
      before:  4.5 ms/op,  2.5 MiB/op,  61k allocs/op
      after:  11.5 ms/op, 45.8 MiB/op, 616k allocs/op
    
    Change-Id: I22baa5498248ca9f7e504fca843519e6745ff566
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8561829
    Reviewed-by: Neri Marschik <nerima@google.com>
    Commit-Queue: Philipp Wollermann <philwo@google.com>

commit 990663a13e66e7dcd017a92243a4c65a5686fe7f
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 19:40:26 2026 -0700

    kajiya: keep symlink outputs that dangle in the sandbox
    
    Kajiya tried to strictly implement REAPI 2.0's semantics for the
    output_file_symlinks and output_directory_symlinks fields, which
    requires stat'ing all symlink outputs to determine the type of file they
    point to. This by design means that dangling symlinks were not possible
    to support, and also caused symlink outputs that pointed to input files
    to get accidentally dropped when using the overlayfs sandbox. REAPI 2.1
    recognized that splitting outputs by type is problematic and merged the
    lists into just output_symlinks. In practice, Bazel and Siso just merge
    these lists into one anyway when they talk to a REAPI 2.0 server.
    
    Kajiya now simply reports each symlink output in the list matching the
    type that the action expects them to have, which resolves the issues and
    works for all our clients.
    
    Change-Id: I88d07d1563dcee2e62b8cfe4c79631f8e5d9f5f7
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8561828
    Reviewed-by: Neri Marschik <nerima@google.com>
    Commit-Queue: Philipp Wollermann <philwo@google.com>

commit ebb6f6e7781856e0862587e698e95e5b2ff56f39
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 19:40:19 2026 -0700

    kajiya: tell GetTree clients which directories are missing
    
    GetTree failed with NOT_FOUND when any Directory of the tree was missing
    from the CAS, and named only the first one. REAPI reserves NOT_FOUND
    for a missing root, so a client couldn't tell a missing root from a
    missing subdirectory, or learn which directories to upload.
    
    Return NOT_FOUND only for a missing root. For other missing directories,
    fail with FAILED_PRECONDITION and a MISSING violation for each one that
    the present part of the tree refers to, as Execute does for missing
    inputs.
    
    This deliberately deviates from REAPI, which asks GetTree to succeed
    with only the part of the tree that is present, without telling the
    client that anything is missing. Failing is safer, because no client
    can mistake a partial tree for a complete one, and it spares careful
    clients from hashing every Directory they receive to look for gaps. It
    also keeps paging simple. The breadth-first order of a complete tree
    depends only on its root digest, so a resumed stream can't skip or
    repeat directories that were uploaded between two pages. RBE and
    NativeLink also fail instead of returning a partial tree.
    
    Change-Id: Ibbc993685007e36894c8eef06da43b2bfa2e714f
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8561827
    Reviewed-by: Neri Marschik <nerima@google.com>
    Commit-Queue: Philipp Wollermann <philwo@google.com>

commit 5775d18c4c7c42029fcbd84bd0096d00b05b7d42
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 19:40:12 2026 -0700

    kajiya: build the missing-blobs status in MissingBlobsError
    
    Execute turned a *MissingBlobsError into a FAILED_PRECONDITION status
    with a MISSING violation per blob in a private helper, so no other RPC
    could report missing blobs the same way. Move it to a Status method on
    MissingBlobsError. This changes no behavior.
    
    Change-Id: Iac650983b4a04c71fc78cc7aeeab56eee2b143ea
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8561826
    Commit-Queue: Philipp Wollermann <philwo@google.com>
    Reviewed-by: Neri Marschik <nerima@google.com>

commit eda3c3660539e08fecd88f32dae494f317723de5
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 19:40:04 2026 -0700

    kajiya: advertise node properties under their REAPI names
    
    GetCapabilities listed the supported node properties as "MTime" and
    "UnixMode", but REAPI keys the standard properties by their field names
    in NodeProperties, which clients such as BuildStream send as "mtime".
    Advertise "mtime" and "unix_mode" instead.
    
    Change-Id: I45162ae958fb07f220b5bc975bc71e20f698c246
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8561825
    Commit-Queue: Philipp Wollermann <philwo@google.com>
    Reviewed-by: Neri Marschik <nerima@google.com>

commit 84b2151e768a41f9d2e53d4a3ea23de51d14215b
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 19:32:57 2026 -0700

    kajiya: stop EnsureDirectory at the first failed directory
    
    EnsureDirectory walked every directory of an input tree and stored each
    directory's result in the same error variable, so a failure in any
    directory but the last one walked was overwritten and EnsureDirectory
    returned nil. The nested overlayfs sandbox then set up an overlay mount
    whose lower directory didn't exist, and the client never got the error
    that names the missing blobs. Stop the walk at the first failure and
    return its error.
    
    Change-Id: I360119e9a6a546a1d5600f9fd5cd96ec44a4c8f0
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8561824
    Commit-Queue: Neri Marschik <nerima@google.com>
    Reviewed-by: Neri Marschik <nerima@google.com>
    Commit-Queue: Philipp Wollermann <philwo@google.com>

commit f60375bb35e6d271d49a4098a7aed379e29351dd
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 19:32:22 2026 -0700

    kajiya: reject UpdateActionResult without an action result
    
    An UpdateActionResultRequest without an action_result made the handler
    dereference a nil pointer. No gRPC interceptor recovers from panics, so
    one such request crashed the server. Reject it with INVALID_ARGUMENT
    before using the result.
    
    Change-Id: I4030842fa3cd4f305146ec57e073f3cddb1d63b4
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8561823
    Reviewed-by: Neri Marschik <nerima@google.com>
    Commit-Queue: Philipp Wollermann <philwo@google.com>

commit f9d467b4260e2597e65d766ddbb756a8f47a119e
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 19:32:14 2026 -0700

    kajiya: remove sandboxes with unreadable directories
    
    When RemoveAll fails, deleteSandbox adds the owner's write bit to every
    directory and tries again. But RemoveAll also has to read a directory
    to list it and search it to unlink its entries, so a non-empty
    directory that an action left without those bits, such as one with
    mode 0000, kept the sandbox on disk. Give the owner read, write and
    search permission instead.
    
    Change-Id: I5bd4932c1fc9da8235eb52f40da118e247d3b36e
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8561822
    Commit-Queue: Philipp Wollermann <philwo@google.com>
    Reviewed-by: Neri Marschik <nerima@google.com>

commit 898a686bb11751e2c1fd3e38e1c49087fa17c0f2
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 19:32:06 2026 -0700

    kajiya: don't crash removing a sandbox without work/
    
    The WalkDir callbacks in deleteSandbox used d without checking err, but
    WalkDir passes a nil d when it can't stat the root. The first walk
    starts at the sandbox's overlayfs work/ directory, which the files
    strategy (the default outside Linux) never creates, and which the other
    strategies lack when Prepare fails before creating it. The resulting
    panic in Execute's deferred cleanup crashed the server and left the
    sandbox behind, so every later start crashed again while removing it.
    
    Skip entries that WalkDir reports an error for.
    
    Change-Id: I5ec79b9f5ce8120ae5f2cbcc67e3400a1dd7e511
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8561821
    Reviewed-by: Neri Marschik <nerima@google.com>
    Commit-Queue: Philipp Wollermann <philwo@google.com>

commit def04ba3555ab5a0da7ea8b71e0bc37bb689e9d0
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 19:31:58 2026 -0700

    kajiya: report symlinks in output directories as symlinks
    
    buildMerkleTree treated every non-directory entry of an output
    directory as a file, so a symlink was hashed through the link and
    reported as a copy of its target. When the target's content wasn't in
    the CAS yet, the link itself became the CAS blob. A symlink to a
    directory or a dangling symlink failed the action.
    
    Record each symlink as a SymlinkNode with the target stored in the
    link, and leave it out of the CAS.
    
    Change-Id: Ia4a3ad96330f366ba405c36cfb0880ef91a670f2
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8561820
    Reviewed-by: Neri Marschik <nerima@google.com>
    Commit-Queue: Philipp Wollermann <philwo@google.com>

commit 95f859b7ca82e93d13eda68b113e6a78f3ecdffe
Author: Philipp Wollermann <philwo@google.com>
Date:   Tue Oct 13 19:30:16 2026 -0700

    kajiya: report symlink outputs with their stored target
    
    UploadOutputs set OutputSymlink.target from the os.Stat result, which
    follows the link, so every symlink output was reported with its own
    basename as the target, and a client that materialized it got a link
    pointing at itself. Read the target with os.Readlink instead.
    
    Change-Id: I07f883602040d813b2f4fa84097daa772b4fa70d
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8561819
    Reviewed-by: Neri Marschik <nerima@google.com>
    Commit-Queue: Philipp Wollermann <philwo@google.com>

commit 642d76ad3bb4d44a0a510e7aa2e3be949dd4ed13
Author: Fumitoshi Ukai <ukai@google.com>
Date:   Tue Oct 13 05:32:30 2026 -0700

    siso: concurrent compute in digester.stop
    
    Bug: b/360961799
    Change-Id: Id83efb5bddb6d0b387e1f264eed1c4ed09d1d604
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8547170
    Auto-Submit: Fumitoshi Ukai <ukai@google.com>
    Reviewed-by: Junji Watanabe <jwata@google.com>
    Commit-Queue: Junji Watanabe <jwata@google.com>

commit 15b2b130964f2e78f585a76d4ec43890dfa0d28f
Author: Richard Wang <richardwa@google.com>
Date:   Tue Oct 13 02:20:49 2026 -0700

    Enforce subtest name linter on majority of the repo
    
    That is, bench, hashigo, kajiya, kzipinfo, remote-apis,
    infra/subtestanalyzer.
    
    gong and siso-tap are excluded.
    
    Bug: 539831698
    Change-Id: If321855bc6553eb447174f2119027dba6a6a6964
    Reviewed-on: https://chromium-review.googlesource.com/c/build/+/8567400
    Reviewed-by: Takuto Ikuta <tikuta@chromium.org>
    Commit-Queue: Richard Wang <richardwa@google.com>
Created: 2026-11-01 Last update: 2026-11-01 22:51
testing migrations
  • excuses:
    • Migrates after: golang-golang-x-net
    • Migration status for siso (- to 1.6.7+ds-1): BLOCKED: Maybe temporary, maybe blocked but Britney is missing information (check below)
    • Issues preventing migration:
    • ∙ ∙ Missing build on riscv64
    • ∙ ∙ Autopkgtest deferred on riscv64: missing arch:riscv64 build
    • ∙ ∙ Autopkgtest for siso/1.6.7+ds-1: amd64: Pass, arm64: Pass, armhf: Pass, i386: Test triggered, loong64: Test triggered, ppc64el: Pass, s390x: Pass
    • ∙ ∙ Lintian check waiting for test results on riscv64 - info
    • ∙ ∙ Too young, only 1 of 5 days old
    • ∙ ∙ Built-Using: siso golang-golang-x-net
    • Additional info (not blocking):
    • ∙ ∙ Piuparts tested OK - https://piuparts.debian.org/sid/source/s/siso.html
    • ∙ ∙ Reproduced on amd64 - info
    • ∙ ∙ Reproduced on arm64 - info
    • ∙ ∙ Reproduced on armhf - info
    • ∙ ∙ Reproduced on i386 - info
    • Not considered
news
[rss feed]
  • [2026-11-01] Accepted siso 1.6.7+ds-1 (source) into unstable (Juan Manuel Méndez Rey)
  • [2026-10-16] Accepted siso 1.6.4+ds-1 (source) into unstable (Juan Manuel Méndez Rey) (signed by: Andres Salomon)
  • [2026-08-21] Accepted siso 1.5.22+ds-2 (source) into unstable (Juan Manuel Méndez Rey)
  • [2026-08-20] Accepted siso 1.5.22+ds-1 (source) into unstable (Juan Manuel Méndez Rey)
  • [2026-07-12] Accepted siso 1.5.21+ds-1 (source) into unstable (Juan Manuel Méndez Rey)
  • [2026-06-18] Accepted siso 1.5.19+ds-1 (source) into unstable (Juan Manuel Méndez Rey)
  • [2026-06-07] Accepted siso 1.5.16+ds-1 (source) into unstable (Juan Manuel Méndez Rey)
  • [2026-05-24] Accepted siso 1.5.15+ds-1 (source) into unstable (Juan Manuel Méndez Rey)
  • [2026-05-19] Accepted siso 1.5.13+ds-1 (source amd64) into unstable (Debian FTP Masters) (signed by: Simon Josefsson)
bugs [bug history graph]
  • all: 2
  • RC: 0
  • I&N: 1
  • M&W: 1
  • F&P: 0
  • patch: 1
links
  • homepage
  • lintian
  • buildd: logs, cross
  • popcon
  • browse source code
  • other distros
  • debian patches
  • debci
ubuntu Ubuntu logo [Information about Ubuntu for Debian Developers]
  • version: 1.5.22+ds-1

Debian Package Tracker — Copyright 2013-2025 The Distro Tracker Developers
Report problems to the tracker.debian.org pseudo-package in the Debian BTS.
Documentation — Bugs — Git Repository — Contributing