cherry-pick to include github tools release branch (#29533)

This PR cherry picks
[a49b777ccfc1d69bee090471ed95e76f35e1ddb2](https://github.com/bazelbuild/bazel/commit/a49b777ccfc1d69bee090471ed95e76f35e1ddb2)
into the rolling release

---------

Co-authored-by: Ted Xie <tedx@google.com>
Co-authored-by: Googler <noreply@google.com>
Co-authored-by: deepalak56 <deepalakshmib@google.com>
Co-authored-by: Chi Wang <coeuvre@gmail.com>
diff --git a/.bazelci/postsubmit.yml b/.bazelci/postsubmit.yml
index cdee71b..c3d21c8 100644
--- a/.bazelci/postsubmit.yml
+++ b/.bazelci/postsubmit.yml
@@ -238,8 +238,8 @@
       - "//src:bazel_nojdk.exe"
     include_json_profile:
       - build
-  rbe_ubuntu2004:
-    platform: ubuntu2004
+  rbe_ubuntu2404:
+    platform: ubuntu2404
     name: "RBE"
     shell_commands:
       - if [ -n "${UPDATE_BAZEL_LOCK_FILE:-}" ]; then bazel mod deps --lockfile_mode=update; fi
diff --git a/.bazelci/presubmit.yml b/.bazelci/presubmit.yml
index d1b5991..b6403c8 100644
--- a/.bazelci/presubmit.yml
+++ b/.bazelci/presubmit.yml
@@ -241,8 +241,8 @@
       - "//src:bazel_nojdk.exe"
     include_json_profile:
       - build
-  rbe_ubuntu2004:
-    platform: ubuntu2004
+  rbe_ubuntu2404:
+    platform: ubuntu2404
     name: "RBE"
     build_flags:
       - "--config=remote"
diff --git a/.bazelrc b/.bazelrc
index 9d2fb01..5f6b883 100644
--- a/.bazelrc
+++ b/.bazelrc
@@ -13,14 +13,14 @@
 common:remote_shared --action_env=PATH=/bin:/usr/bin:/usr/local/bin
 
 # Configuration to build and test Bazel on RBE on Ubuntu 20.04
-common:ubuntu2004 --extra_toolchains=@rbe_ubuntu2004//config:cc-toolchain
-common:ubuntu2004 --extra_execution_platforms=//:rbe_ubuntu2004_platform,//:rbe_ubuntu2004_highcpu_platform
-common:ubuntu2004 --host_platform=//:rbe_ubuntu2004_platform
-common:ubuntu2004 --platforms=//:rbe_ubuntu2004_platform
-common:ubuntu2004 --config=remote_shared
+common:ubuntu2404 --extra_toolchains=@rbe_ubuntu2404//config:cc-toolchain
+common:ubuntu2404 --extra_execution_platforms=//:rbe_ubuntu2404_platform,//:rbe_ubuntu2404_highcpu_platform
+common:ubuntu2404 --host_platform=//:rbe_ubuntu2404_platform
+common:ubuntu2404 --platforms=//:rbe_ubuntu2404_platform
+common:ubuntu2404 --config=remote_shared
 
 # Alias
-common:remote --config=ubuntu2004
+common:remote --config=ubuntu2404
 
 common:macos --host_macos_minimum_os=10.13
 common:macos --macos_minimum_os=10.13
diff --git a/BUILD b/BUILD
index d84283b..33ce90d 100644
--- a/BUILD
+++ b/BUILD
@@ -291,7 +291,7 @@
     ],
 )
 
-REMOTE_PLATFORMS = ("rbe_ubuntu2004",)
+REMOTE_PLATFORMS = ("rbe_ubuntu2404",)
 
 [
     platform(
diff --git a/MODULE.bazel b/MODULE.bazel
index 4e81164..50a6ed6 100644
--- a/MODULE.bazel
+++ b/MODULE.bazel
@@ -444,8 +444,8 @@
 rbe_preconfig = use_repo_rule("@bazel_ci_rules//:rbe_repo.bzl", "rbe_preconfig")
 
 rbe_preconfig(
-    name = "rbe_ubuntu2004",
-    toolchain = "ubuntu2004",
+    name = "rbe_ubuntu2404",
+    toolchain = "ubuntu2404",
 )
 
 list_source_repository = use_repo_rule("//src/test/shell/bazel:list_source_repository.bzl", "list_source_repository")
diff --git a/scripts/ci/build.sh b/scripts/ci/build.sh
index b87e99f..fee66d9 100755
--- a/scripts/ci/build.sh
+++ b/scripts/ci/build.sh
@@ -33,10 +33,9 @@
   echo "See https://cloud.google.com/sdk/downloads for instructions."
   exit 1
 fi
-if ! command -v github-release &>/dev/null; then
-  echo "Required tool 'github-release' not found. Download it from here:"
-  echo "https://github.com/c4milo/github-release/releases"
-  echo "Just extract the archive and put the binary on your PATH."
+if ! command -v gh &>/dev/null; then
+  echo "Required tool 'gh' (GitHub CLI) not found. Please install it:"
+  echo "See https://cli.github.com/ for instructions."
   exit 1
 fi
 if ! command -v debsign &>/dev/null; then
@@ -136,8 +135,8 @@
 '
 }
 
-# Deploy a github release using a third party tool:
-#   https://github.com/c4milo/github-release
+# Deploy a github release using the official GitHub CLI (gh):
+#   https://cli.github.com/
 # This methods expects the following arguments:
 #   $1..$n files generated by package_build (should not contains the README file)
 # Please set GITHUB_TOKEN to talk to the Github API.
@@ -150,13 +149,55 @@
   local release_branch=$(get_release_branch)
 
   if [ -n "${release_name}" ]; then
-    local github_token="$(gsutil cat gs://bazel-trusted-encrypted-secrets/github-trusted-token.enc | \
+    local github_token
+    github_token="$(gsutil cat gs://bazel-trusted-encrypted-secrets/github-trusted-token.enc | \
         gcloud kms decrypt --project bazel-public --location global --keyring buildkite --key github-trusted-token --ciphertext-file - --plaintext-file -)"
-    if [ -z "${rc}" ]; then
-      GITHUB_TOKEN="${github_token}" github-release "bazelbuild/bazel" "${release_name}" "" "$(get_release_page)" "${artifact_dir}/*"
+
+    local latest_flag="true"
+    local prerelease_flag=""
+    local tag_to_deploy="${release_name}"
+
+    if [ -n "${rc}" ]; then
+      tag_to_deploy="${full_release_name}"
+      prerelease_flag="--prerelease"
+      latest_flag="false"
     else
-      GITHUB_TOKEN="${github_token}" github-release -prerelease "bazelbuild/bazel" "${full_release_name}" "${release_branch}" "$(get_release_page)" "${artifact_dir}/*"
+      echo "+++ Checking if ${release_name} should be marked as Latest"
+      # Query the current GitHub "latest" release to compare versions.
+      local current_latest_tag
+      if current_latest_tag=$(GH_TOKEN="${github_token}" gh release view --repo "bazelbuild/bazel" --json tagName --jq .tagName 2>/dev/null); then
+        if [[ -n "${current_latest_tag}" ]]; then
+          local highest
+          highest=$(printf '%s\n%s' "${current_latest_tag}" "${release_name}" | sort -V | tail -n 1)
+          if [[ "${release_name}" != "${highest}" ]]; then
+            echo "+++ Version ${release_name} is older than ${current_latest_tag}. Will NOT mark as latest."
+            latest_flag="false"
+          fi
+        fi
+      else
+        echo "+++ Warning: Could not determine current latest release tag. Will NOT mark as latest to be safe."
+        latest_flag="false"
+      fi
     fi
+
+    # Use a subshell so that the EXIT trap for temp file cleanup does not
+    # affect the outer script's traps.
+    (
+      notes_file="$(mktemp)"
+      trap 'rm -f "$notes_file"' EXIT
+      get_release_page > "$notes_file"
+
+      echo "+++ Deploying to GitHub (Tag: ${tag_to_deploy}, Latest: ${latest_flag})"
+
+      GH_TOKEN="${github_token}" gh release create "${tag_to_deploy}" \
+         "${artifact_dir}"/* \
+         --repo "bazelbuild/bazel" \
+         --target "${release_branch}" \
+         --title "${tag_to_deploy}" \
+         --notes-file "$notes_file" \
+         ${prerelease_flag} \
+         --latest="${latest_flag}"
+    )
   fi
 }
 
@@ -457,4 +498,3 @@
   cp "${artifact_dir}"/* "${gcs_working_dir}"
   release_to_gcs "${gcs_working_dir}"
 }
-
diff --git a/src/main/java/com/google/devtools/build/lib/query2/QueryEnvironmentFactory.java b/src/main/java/com/google/devtools/build/lib/query2/QueryEnvironmentFactory.java
index 7d29547..4316f76 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/QueryEnvironmentFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/QueryEnvironmentFactory.java
@@ -53,6 +53,7 @@
       boolean orderedResults,
       UniverseScope universeScope,
       int loadingPhaseThreads,
+      boolean trackIncrementalState,
       Predicate<Label> labelFilter,
       ExtendedEventHandler eventHandler,
       Set<Setting> settings,
@@ -65,6 +66,7 @@
       return new SkyQueryEnvironment(
           keepGoing,
           loadingPhaseThreads,
+          trackIncrementalState,
           eventHandler,
           settings,
           extraFunctions,
diff --git a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
index 2e66066..468a68e 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/SkyQueryEnvironment.java
@@ -74,6 +74,7 @@
 import com.google.devtools.build.lib.query2.common.UniverseScope;
 import com.google.devtools.build.lib.query2.common.UniverseSkyKey;
 import com.google.devtools.build.lib.query2.compat.FakeLoadTarget;
+import com.google.devtools.build.lib.query2.engine.AggregatingQueryExpressionVisitor.RequiresEdgesQueryExpressionVisitor;
 import com.google.devtools.build.lib.query2.engine.AllRdepsFunction;
 import com.google.devtools.build.lib.query2.engine.Callback;
 import com.google.devtools.build.lib.query2.engine.KeyExtractor;
@@ -156,6 +157,7 @@
 
   private final BlazeTargetAccessor accessor = new BlazeTargetAccessor(this);
   protected final int loadingPhaseThreads;
+  protected final boolean trackIncrementalState;
   protected final WalkableGraphFactory graphFactory;
   protected final UniverseScope universeScope;
   protected final TargetPattern.Parser mainRepoTargetParser;
@@ -175,6 +177,7 @@
   public SkyQueryEnvironment(
       boolean keepGoing,
       int loadingPhaseThreads,
+      boolean trackIncrementalState,
       ExtendedEventHandler eventHandler,
       Set<Setting> settings,
       Iterable<QueryFunction> extraFunctions,
@@ -187,6 +190,7 @@
     this(
         keepGoing,
         loadingPhaseThreads,
+        trackIncrementalState,
         // SkyQueryEnvironment operates on a prepopulated Skyframe graph. Therefore, query
         // evaluation is completely CPU-bound.
         /* queryEvaluationParallelismLevel= */ DEFAULT_THREAD_COUNT,
@@ -204,6 +208,7 @@
   protected SkyQueryEnvironment(
       boolean keepGoing,
       int loadingPhaseThreads,
+      boolean trackIncrementalState,
       int queryEvaluationParallelismLevel,
       ExtendedEventHandler eventHandler,
       Set<Setting> settings,
@@ -223,6 +228,7 @@
         extraFunctions,
         labelPrinter);
     this.loadingPhaseThreads = loadingPhaseThreads;
+    this.trackIncrementalState = trackIncrementalState;
     this.graphFactory = graphFactory;
     this.pkgPath = pkgPath;
     this.universeScope = universeScope;
@@ -262,6 +268,15 @@
   protected void beforeEvaluateQuery(
       QueryExpression expr, ThreadSafeOutputFormatterCallback<Target> callback)
       throws QueryException, InterruptedException {
+    if (!trackIncrementalState) {
+      RequiresEdgesQueryExpressionVisitor visitor = new RequiresEdgesQueryExpressionVisitor();
+      if (expr.accept(visitor)) {
+        throw new QueryException(
+            expr,
+            "Queries requiring edge traversal are not supported with --notrack_incremental_state",
+            Code.ILLEGAL_FLAG_COMBINATION);
+      }
+    }
     UniverseSkyKey universeKey = universeScope.getUniverseKey(expr, parserPrefix);
     ImmutableList<String> universeScopeListToUse = universeKey.getPatterns();
     logger.atInfo().log("Using a --universe_scope value of %s", universeScopeListToUse);
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/AggregatingQueryExpressionVisitor.java b/src/main/java/com/google/devtools/build/lib/query2/engine/AggregatingQueryExpressionVisitor.java
index f4b2487..5892a56 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/engine/AggregatingQueryExpressionVisitor.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/engine/AggregatingQueryExpressionVisitor.java
@@ -114,4 +114,36 @@
       return Booleans.contains(Booleans.toArray(resultMap.values()), true);
     }
   }
+
+  /** Returns true when the query expression contains at least one function that requires edges. */
+  public static class RequiresEdgesQueryExpressionVisitor
+      extends AggregatingQueryExpressionVisitor<Boolean, Void>
+      implements QueryExpressionVisitor<Boolean, Void> {
+
+    public RequiresEdgesQueryExpressionVisitor() {}
+
+    @Override
+    public Boolean visit(TargetLiteral targetLiteral, Void context) {
+      return false;
+    }
+
+    @Override
+    public Boolean visit(SetExpression setExpression, Void context) {
+      return false;
+    }
+
+    @Override
+    public Boolean visit(FunctionExpression functionExpression, Void context) {
+      if (functionExpression.getFunction().requiresEdges()) {
+        return true;
+      } else {
+        return super.visit(functionExpression, context);
+      }
+    }
+
+    @Override
+    protected Boolean aggregate(ImmutableMap<QueryExpression, Boolean> resultMap) {
+      return Booleans.contains(Booleans.toArray(resultMap.values()), true);
+    }
+  }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/AllPathsFunction.java b/src/main/java/com/google/devtools/build/lib/query2/engine/AllPathsFunction.java
index 3ae52d7..1a78d79 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/engine/AllPathsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/engine/AllPathsFunction.java
@@ -33,8 +33,7 @@
  * Implementation of the <code>allpaths()</code> function.
  */
 public class AllPathsFunction implements QueryFunction {
-  AllPathsFunction() {
-  }
+  public AllPathsFunction() {}
 
   @Override
   public String getName() {
@@ -52,6 +51,11 @@
   }
 
   @Override
+  public boolean requiresEdges() {
+    return true;
+  }
+
+  @Override
   public <T> QueryTaskFuture<Void> eval(
       final QueryEnvironment<T> env,
       QueryExpressionContext<T> context,
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/AllRdepsFunction.java b/src/main/java/com/google/devtools/build/lib/query2/engine/AllRdepsFunction.java
index 14196cb..6740680 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/engine/AllRdepsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/engine/AllRdepsFunction.java
@@ -42,6 +42,11 @@
   }
 
   @Override
+  public boolean requiresEdges() {
+    return true;
+  }
+
+  @Override
   public int getMandatoryArguments() {
     return 1; // last argument is optional
   }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/DepsFunction.java b/src/main/java/com/google/devtools/build/lib/query2/engine/DepsFunction.java
index c70453a..7bccb8d 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/engine/DepsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/engine/DepsFunction.java
@@ -52,6 +52,11 @@
     return ImmutableList.of(ArgumentType.EXPRESSION, ArgumentType.INTEGER);
   }
 
+  @Override
+  public boolean requiresEdges() {
+    return true;
+  }
+
   /** Breadth-first search from the arguments. */
   @SuppressWarnings("unchecked")
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/QueryEnvironment.java b/src/main/java/com/google/devtools/build/lib/query2/engine/QueryEnvironment.java
index da7aebe..c372a39 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/engine/QueryEnvironment.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/engine/QueryEnvironment.java
@@ -146,6 +146,11 @@
     default FilteringQueryFunction asFilteringFunction() {
       return null;
     }
+
+    /** Returns true if this function requires traversing edges in the graph. */
+    default boolean requiresEdges() {
+      return false;
+    }
   }
 
   /** A {@link QueryFunction} whose output is a subset of some input argument expression. */
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/RdepsFunction.java b/src/main/java/com/google/devtools/build/lib/query2/engine/RdepsFunction.java
index 7a54073..841e653 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/engine/RdepsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/engine/RdepsFunction.java
@@ -42,6 +42,11 @@
   }
 
   @Override
+  public boolean requiresEdges() {
+    return true;
+  }
+
+  @Override
   public int getMandatoryArguments() {
     return super.getMandatoryArguments() + 1;  // +1 for the universe.
   }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/SamePkgDirectRdepsFunction.java b/src/main/java/com/google/devtools/build/lib/query2/engine/SamePkgDirectRdepsFunction.java
index ede3031..17c31e1 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/engine/SamePkgDirectRdepsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/engine/SamePkgDirectRdepsFunction.java
@@ -41,6 +41,11 @@
   }
 
   @Override
+  public boolean requiresEdges() {
+    return true;
+  }
+
+  @Override
   public int getMandatoryArguments() {
     return 1;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/SiblingsFunction.java b/src/main/java/com/google/devtools/build/lib/query2/engine/SiblingsFunction.java
index 4a8ea7f..d50d7a8 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/engine/SiblingsFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/engine/SiblingsFunction.java
@@ -36,6 +36,11 @@
   }
 
   @Override
+  public boolean requiresEdges() {
+    return true;
+  }
+
+  @Override
   public int getMandatoryArguments() {
     return 1;
   }
diff --git a/src/main/java/com/google/devtools/build/lib/query2/engine/SomePathFunction.java b/src/main/java/com/google/devtools/build/lib/query2/engine/SomePathFunction.java
index 07889a4..f2a7863 100644
--- a/src/main/java/com/google/devtools/build/lib/query2/engine/SomePathFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/query2/engine/SomePathFunction.java
@@ -34,8 +34,7 @@
  * <pre>expr ::= SOMEPATH '(' expr ',' expr ')'</pre>
  */
 public class SomePathFunction implements QueryFunction {
-  SomePathFunction() {
-  }
+  public SomePathFunction() {}
 
   @Override
   public String getName() {
@@ -53,6 +52,11 @@
   }
 
   @Override
+  public boolean requiresEdges() {
+    return true;
+  }
+
+  @Override
   public <T> QueryTaskFuture<Void> eval(
       final QueryEnvironment<T> env,
       QueryExpressionContext<T> context,
diff --git a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
index d50f687..f925c95 100644
--- a/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
+++ b/src/main/java/com/google/devtools/build/lib/rules/genquery/GenQuery.java
@@ -306,6 +306,8 @@
               // (b/127644784). All the packages are already loaded at this point, so there is
               // no need to start up multiple threads anyway.
               /* loadingPhaseThreads= */ 1,
+              // Passing true is safe because GenQuery passes UniverseScope.EMPTY.
+              /* trackIncrementalState= */ true,
               packageProvider.getValidTargetPredicate(),
               getEventHandler(ruleContext),
               settings,
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/BUILD b/src/main/java/com/google/devtools/build/lib/runtime/commands/BUILD
index bfbe0fe..aa2e7d3 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/BUILD
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/BUILD
@@ -84,6 +84,7 @@
         "//src/main/java/com/google/devtools/build/lib/runtime:blaze_command_cluster",
         "//src/main/java/com/google/devtools/build/lib/runtime:blaze_command_result",
         "//src/main/java/com/google/devtools/build/lib/runtime:blaze_server_startup_options",
+        "//src/main/java/com/google/devtools/build/lib/runtime:common_command_options",
         "//src/main/java/com/google/devtools/build/lib/runtime:instrumentation_output",
         "//src/main/java/com/google/devtools/build/lib/runtime:keep_going_option",
         "//src/main/java/com/google/devtools/build/lib/runtime:loading_phase_threads_option",
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryEnvironmentBasedCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryEnvironmentBasedCommand.java
index 497a995..570bf3e 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryEnvironmentBasedCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/QueryEnvironmentBasedCommand.java
@@ -43,6 +43,7 @@
 import com.google.devtools.build.lib.runtime.BlazeCommandResult;
 import com.google.devtools.build.lib.runtime.BlazeRuntime;
 import com.google.devtools.build.lib.runtime.CommandEnvironment;
+import com.google.devtools.build.lib.runtime.CommonCommandOptions;
 import com.google.devtools.build.lib.runtime.KeepGoingOption;
 import com.google.devtools.build.lib.runtime.LoadingPhaseThreadsOption;
 import com.google.devtools.build.lib.runtime.QueryRuntimeHelper;
@@ -263,6 +264,9 @@
       env.getReporter().post(new LoadingPhaseStartedEvent(progressReceiver));
     }
 
+    boolean trackIncrementalState =
+        env.getOptions().getOptions(CommonCommandOptions.class).getTrackIncrementalState();
+
     return env.getRuntime()
         .getQueryEnvironmentFactory()
         .create(
@@ -278,6 +282,7 @@
             orderedResults,
             universeScope,
             loadingPhaseThreads,
+            trackIncrementalState,
             /* labelFilter= */ ALL_LABELS,
             env.getReporter(),
             settings,
diff --git a/src/test/java/com/google/devtools/build/lib/query2/engine/GraphlessQueryTest.java b/src/test/java/com/google/devtools/build/lib/query2/engine/GraphlessQueryTest.java
index 040984b..1d3f360 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/engine/GraphlessQueryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/engine/GraphlessQueryTest.java
@@ -115,6 +115,7 @@
               boolean orderedResults,
               UniverseScope universeScope,
               int loadingPhaseThreads,
+              boolean trackIncrementalState,
               Predicate<Label> labelFilter,
               ExtendedEventHandler eventHandler,
               Set<Setting> settings,
diff --git a/src/test/java/com/google/devtools/build/lib/query2/engine/TotalWeightQueryExpressionVisitorTest.java b/src/test/java/com/google/devtools/build/lib/query2/engine/TotalWeightQueryExpressionVisitorTest.java
index 7568348..4efdb7b 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/engine/TotalWeightQueryExpressionVisitorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/engine/TotalWeightQueryExpressionVisitorTest.java
@@ -86,6 +86,7 @@
     return new SkyQueryEnvironment(
         /* keepGoing= */ false,
         /* loadingPhaseThreads= */ 1,
+        /* trackIncrementalState= */ true,
         /* eventHandler= */ NullEventHandler.INSTANCE,
         /* settings= */ ImmutableSet.of(),
         /* extraFunctions= */ ImmutableList.of(),
diff --git a/src/test/java/com/google/devtools/build/lib/query2/testutil/SkyframeQueryHelper.java b/src/test/java/com/google/devtools/build/lib/query2/testutil/SkyframeQueryHelper.java
index 5db6fda..4b03d9a 100644
--- a/src/test/java/com/google/devtools/build/lib/query2/testutil/SkyframeQueryHelper.java
+++ b/src/test/java/com/google/devtools/build/lib/query2/testutil/SkyframeQueryHelper.java
@@ -237,6 +237,7 @@
         orderedResults,
         universeScope,
         /* loadingPhaseThreads= */ 1,
+        /* trackIncrementalState= */ true,
         /* labelFilter= */ ALL_LABELS,
         getReporter(),
         this.settings,