diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
index 73302b4..50a6d96 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/ExecutionTool.java
@@ -791,7 +791,8 @@
             ? modifiedOutputFiles
             : ModifiedFileSet.NOTHING_MODIFIED,
         env.getFileCache(),
-        prefetcher);
+        prefetcher,
+        env.getRuntime().getBugReporter());
   }
 
   @VisibleForTesting
diff --git a/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java b/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java
index 5e0c736..8d48b77 100644
--- a/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/buildtool/SkyframeBuilder.java
@@ -35,7 +35,7 @@
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.TopLevelArtifactContext;
 import com.google.devtools.build.lib.analysis.test.TestProvider;
-import com.google.devtools.build.lib.bugreport.BugReport;
+import com.google.devtools.build.lib.bugreport.BugReporter;
 import com.google.devtools.build.lib.buildtool.buildevent.ExecutionProgressReceiverAvailableEvent;
 import com.google.devtools.build.lib.events.ExtendedEventHandler;
 import com.google.devtools.build.lib.events.Reporter;
@@ -87,6 +87,7 @@
   private final ActionInputPrefetcher actionInputPrefetcher;
   private final ActionCacheChecker actionCacheChecker;
   private final TopDownActionCache topDownActionCache;
+  private final BugReporter bugReporter;
 
   @VisibleForTesting
   public SkyframeBuilder(
@@ -96,7 +97,8 @@
       TopDownActionCache topDownActionCache,
       ModifiedFileSet modifiedOutputFiles,
       MetadataProvider fileCache,
-      ActionInputPrefetcher actionInputPrefetcher) {
+      ActionInputPrefetcher actionInputPrefetcher,
+      BugReporter bugReporter) {
     this.resourceManager = resourceManager;
     this.skyframeExecutor = skyframeExecutor;
     this.actionCacheChecker = actionCacheChecker;
@@ -104,6 +106,7 @@
     this.modifiedOutputFiles = modifiedOutputFiles;
     this.fileCache = fileCache;
     this.actionInputPrefetcher = actionInputPrefetcher;
+    this.bugReporter = bugReporter;
   }
 
   @Override
@@ -257,7 +260,7 @@
    * <p>Throws on catastrophic failures and, if !keepGoing, on any failure.
    */
   @Nullable
-  private static DetailedExitCode processResult(
+  private DetailedExitCode processResult(
       ExtendedEventHandler eventHandler,
       EvaluationResult<?> result,
       boolean keepGoing,
@@ -270,7 +273,7 @@
       }
 
       if (result.getCatastrophe() != null) {
-        rethrow(result.getCatastrophe());
+        rethrow(result.getCatastrophe(), bugReporter);
       }
       if (keepGoing) {
         // If build fails and keepGoing is true, an exit code is assigned using reported errors
@@ -327,7 +330,7 @@
         throw new BuildFailedException(
             null, createDetailedExitCode("cycle found during execution", Code.CYCLE));
       } else {
-        rethrow(exception);
+        rethrow(exception, bugReporter);
       }
     }
 
@@ -336,7 +339,8 @@
 
   /** Figure out why an action's execution failed and rethrow the right kind of exception. */
   @VisibleForTesting
-  public static void rethrow(Throwable cause) throws BuildFailedException, TestExecException {
+  public static void rethrow(Throwable cause, BugReporter bugReporter)
+      throws BuildFailedException, TestExecException {
     Throwables.throwIfUnchecked(cause);
     Throwable innerCause = cause.getCause();
     if (innerCause instanceof TestExecException) {
@@ -378,7 +382,7 @@
     // We encountered an exception we don't think we should have encountered. This can indicate
     // an exception-processing bug in our code, such as lower level exceptions not being properly
     // handled, or in our expectations in this method.
-    BugReport.sendBugReport(
+    bugReporter.sendBugReport(
         new IllegalStateException("action terminated with unexpected exception", cause));
     String message =
         "Unexpected exception, please file an issue with the Bazel team: " + cause.getMessage();
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/WorkspaceBuilder.java b/src/main/java/com/google/devtools/build/lib/runtime/WorkspaceBuilder.java
index 4438c96..1d9ff08 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/WorkspaceBuilder.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/WorkspaceBuilder.java
@@ -81,7 +81,8 @@
             diffAwarenessFactories.build(),
             skyFunctions.build(),
             customDirtinessCheckers.build(),
-            managedDirectoriesKnowledge);
+            managedDirectoriesKnowledge,
+            runtime.getBugReporter());
     return new BlazeWorkspace(
         runtime,
         directories,
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
index e9091ee..259e6e0 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionExecutionFunction.java
@@ -59,6 +59,7 @@
 import com.google.devtools.build.lib.actionsketch.ActionSketch;
 import com.google.devtools.build.lib.analysis.BlazeDirectories;
 import com.google.devtools.build.lib.bugreport.BugReport;
+import com.google.devtools.build.lib.bugreport.BugReporter;
 import com.google.devtools.build.lib.causes.Cause;
 import com.google.devtools.build.lib.causes.LabelCause;
 import com.google.devtools.build.lib.clock.BlazeClock;
@@ -140,15 +141,18 @@
   private final SkyframeActionExecutor skyframeActionExecutor;
   private final BlazeDirectories directories;
   private final AtomicReference<TimestampGranularityMonitor> tsgm;
+  private final BugReporter bugReporter;
   private ConcurrentMap<Action, ContinuationState> stateMap;
 
   public ActionExecutionFunction(
       SkyframeActionExecutor skyframeActionExecutor,
       BlazeDirectories directories,
-      AtomicReference<TimestampGranularityMonitor> tsgm) {
+      AtomicReference<TimestampGranularityMonitor> tsgm,
+      BugReporter bugReporter) {
     this.skyframeActionExecutor = skyframeActionExecutor;
     this.directories = directories;
     this.tsgm = tsgm;
+    this.bugReporter = bugReporter;
     // TODO(b/136156191): This stays in RAM while the SkyFunction of the action is pending, which
     // can result in a lot of memory pressure if a lot of actions are pending.
     stateMap = Maps.newConcurrentMap();
@@ -952,7 +956,7 @@
         retrievedMetadata = nonMandatoryDiscovered.get(Artifact.key(input)).get();
       } catch (SourceArtifactException e) {
         if (!input.isSourceArtifact()) {
-          BugReport.sendBugReport(
+          bugReporter.sendBugReport(
               new IllegalStateException(
                   "Non-source artifact had SourceArtifactException" + input, e));
         }
@@ -1230,14 +1234,14 @@
         value = valueOrException.get();
       } catch (SourceArtifactException e) {
         if (!input.isSourceArtifact()) {
-          BugReport.sendBugReport(
+          bugReporter.sendBugReport(
               new IllegalStateException(
                   "Non-source artifact had SourceArtifactException" + input, e));
         }
         if (mandatory) {
           sourceArtifactErrorCauses.add(
               createLabelCauseNullOwnerOk(
-                  input, e.getDetailedExitCode(), action.getOwner().getLabel()));
+                  input, e.getDetailedExitCode(), action.getOwner().getLabel(), bugReporter));
           continue;
         }
       } catch (ActionExecutionException e) {
@@ -1265,7 +1269,8 @@
               createLabelCause(
                   input,
                   ((MissingArtifactValue) value).getDetailedExitCode(),
-                  action.getOwner().getLabel()));
+                  action.getOwner().getLabel(),
+                  bugReporter));
           continue;
         } else {
           value = FileArtifactValue.MISSING_FILE_MARKER;
@@ -1428,21 +1433,27 @@
   }
 
   static LabelCause createLabelCause(
-      Artifact input, DetailedExitCode detailedExitCode, Label labelInCaseOfBug) {
+      Artifact input,
+      DetailedExitCode detailedExitCode,
+      Label labelInCaseOfBug,
+      BugReporter bugReporter) {
     if (input.getOwner() == null) {
-      BugReport.sendBugReport(
+      bugReporter.sendBugReport(
           new IllegalStateException(
               String.format(
                   "Mandatory artifact %s with exit code %s should have owner (%s)",
                   input, detailedExitCode, labelInCaseOfBug)));
     }
-    return createLabelCauseNullOwnerOk(input, detailedExitCode, labelInCaseOfBug);
+    return createLabelCauseNullOwnerOk(input, detailedExitCode, labelInCaseOfBug, bugReporter);
   }
 
   private static LabelCause createLabelCauseNullOwnerOk(
-      Artifact input, DetailedExitCode detailedExitCode, Label actionLabel) {
+      Artifact input,
+      DetailedExitCode detailedExitCode,
+      Label actionLabel,
+      BugReporter bugReporter) {
     if (!input.isSourceArtifact()) {
-      BugReport.sendBugReport(
+      bugReporter.sendBugReport(
           new IllegalStateException(
               String.format(
                   "Unexpected exit code %s for generated artifact %s (%s)",
@@ -1699,7 +1710,7 @@
 
     private void handleSourceArtifactExceptionFromSkykey(SkyKey key, SourceArtifactException e) {
       if (!(key instanceof Artifact) || !((Artifact) key).isSourceArtifact()) {
-        BugReport.sendBugReport(
+        bugReporter.sendBugReport(
             new IllegalStateException(
                 "Unexpected SourceArtifactException for key: " + key + ", " + action, e));
         missingArtifactCauses.add(
@@ -1710,13 +1721,17 @@
       if (isMandatory((Artifact) key)) {
         missingArtifactCauses.add(
             createLabelCauseNullOwnerOk(
-                (Artifact) key, e.getDetailedExitCode(), action.getOwner().getLabel()));
+                (Artifact) key,
+                e.getDetailedExitCode(),
+                action.getOwner().getLabel(),
+                bugReporter));
       }
     }
 
     void accumulateMissingFileArtifactValue(Artifact input, MissingArtifactValue value) {
       missingArtifactCauses.add(
-          createLabelCause(input, value.getDetailedExitCode(), action.getOwner().getLabel()));
+          createLabelCause(
+              input, value.getDetailedExitCode(), action.getOwner().getLabel(), bugReporter));
     }
 
     /** @throws ActionExecutionException if there is any accumulated exception from the inputs. */
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/AspectCompletor.java b/src/main/java/com/google/devtools/build/lib/skyframe/AspectCompletor.java
index 3bf7c52..1262936 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/AspectCompletor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/AspectCompletor.java
@@ -20,6 +20,7 @@
 import com.google.devtools.build.lib.analysis.AspectValue;
 import com.google.devtools.build.lib.analysis.TopLevelArtifactHelper.ArtifactsInOutputGroup;
 import com.google.devtools.build.lib.analysis.TopLevelArtifactHelper.ArtifactsToBuild;
+import com.google.devtools.build.lib.bugreport.BugReporter;
 import com.google.devtools.build.lib.buildeventstream.BuildEventIdUtil;
 import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos.BuildEventId;
 import com.google.devtools.build.lib.causes.Cause;
@@ -41,12 +42,14 @@
   static SkyFunction aspectCompletionFunction(
       PathResolverFactory pathResolverFactory,
       SkyframeActionExecutor skyframeActionExecutor,
-      MetadataConsumerForMetrics.FilesMetricConsumer topLevelArtifactsMetric) {
+      MetadataConsumerForMetrics.FilesMetricConsumer topLevelArtifactsMetric,
+      BugReporter bugReporter) {
     return new CompletionFunction<>(
         pathResolverFactory,
         new AspectCompletor(),
         skyframeActionExecutor,
-        topLevelArtifactsMetric);
+        topLevelArtifactsMetric,
+        bugReporter);
   }
 
   @Override
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/CompletionFunction.java b/src/main/java/com/google/devtools/build/lib/skyframe/CompletionFunction.java
index 7da4e7f..9361a3c 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/CompletionFunction.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/CompletionFunction.java
@@ -35,7 +35,7 @@
 import com.google.devtools.build.lib.analysis.TopLevelArtifactHelper.ArtifactsInOutputGroup;
 import com.google.devtools.build.lib.analysis.TopLevelArtifactHelper.ArtifactsToBuild;
 import com.google.devtools.build.lib.analysis.TopLevelArtifactHelper.SuccessfulArtifactFilter;
-import com.google.devtools.build.lib.bugreport.BugReport;
+import com.google.devtools.build.lib.bugreport.BugReporter;
 import com.google.devtools.build.lib.causes.Cause;
 import com.google.devtools.build.lib.causes.LabelCause;
 import com.google.devtools.build.lib.cmdline.Label;
@@ -133,16 +133,19 @@
   private final Completor<ValueT, ResultT, KeyT, FailureT> completor;
   private final SkyframeActionExecutor skyframeActionExecutor;
   private final FilesMetricConsumer topLevelArtifactsMetric;
+  private final BugReporter bugReporter;
 
   CompletionFunction(
       PathResolverFactory pathResolverFactory,
       Completor<ValueT, ResultT, KeyT, FailureT> completor,
       SkyframeActionExecutor skyframeActionExecutor,
-      FilesMetricConsumer topLevelArtifactsMetric) {
+      FilesMetricConsumer topLevelArtifactsMetric,
+      BugReporter bugReporter) {
     this.pathResolverFactory = pathResolverFactory;
     this.completor = completor;
     this.skyframeActionExecutor = skyframeActionExecutor;
     this.topLevelArtifactsMetric = topLevelArtifactsMetric;
+    this.bugReporter = bugReporter;
   }
 
   @SuppressWarnings("unchecked") // Cast to KeyT
@@ -218,7 +221,7 @@
         }
       } catch (SourceArtifactException e) {
         if (!input.isSourceArtifact()) {
-          BugReport.sendBugReport(
+          bugReporter.sendBugReport(
               new IllegalStateException(
                   "Non-source artifact had SourceArtifactException: " + input, e));
         }
@@ -305,7 +308,7 @@
       throws InterruptedException {
     LabelCause cause =
         ActionExecutionFunction.createLabelCause(
-            input, detailedExitCode, key.actionLookupKey().getLabel());
+            input, detailedExitCode, key.actionLookupKey().getLabel(), bugReporter);
     rootCausesBuilder.add(cause);
     env.getListener().handle(completor.getRootCauseError(value, key, cause, env));
     skyframeActionExecutor.recordExecutionError();
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
index 8d0e08b..8e29c08 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
@@ -38,6 +38,7 @@
 import com.google.devtools.build.lib.analysis.WorkspaceStatusAction.Factory;
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
 import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget;
+import com.google.devtools.build.lib.bugreport.BugReporter;
 import com.google.devtools.build.lib.buildtool.BuildRequestOptions;
 import com.google.devtools.build.lib.cmdline.LabelConstants;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
@@ -173,7 +174,8 @@
       ExternalPackageHelper externalPackageHelper,
       ActionOnIOExceptionReadingBuildFile actionOnIOExceptionReadingBuildFile,
       BuildOptions defaultBuildOptions,
-      @Nullable ManagedDirectoriesKnowledge managedDirectoriesKnowledge) {
+      @Nullable ManagedDirectoriesKnowledge managedDirectoriesKnowledge,
+      BugReporter bugReporter) {
     super(
         skyframeExecutorConsumerOnInit,
         evaluatorSupplier,
@@ -195,7 +197,8 @@
         new PackageProgressReceiver(),
         new ConfiguredTargetProgressReceiver(),
         /*nonexistentFileReceiver=*/ null,
-        managedDirectoriesKnowledge);
+        managedDirectoriesKnowledge,
+        bugReporter);
     this.diffAwarenessManager = new DiffAwarenessManager(diffAwarenessFactories);
     this.customDirtinessCheckers = customDirtinessCheckers;
     this.managedDirectoriesKnowledge = managedDirectoriesKnowledge;
@@ -1050,6 +1053,7 @@
     private Iterable<SkyValueDirtinessChecker> customDirtinessCheckers = ImmutableList.of();
     private Consumer<SkyframeExecutor> skyframeExecutorConsumerOnInit = skyframeExecutor -> {};
     private SkyFunction ignoredPackagePrefixesFunction;
+    private BugReporter bugReporter = BugReporter.defaultInstance();
 
     private Builder() {}
 
@@ -1084,7 +1088,8 @@
               externalPackageHelper,
               actionOnIOExceptionReadingBuildFile,
               defaultBuildOptions,
-              managedDirectoriesKnowledge);
+              managedDirectoriesKnowledge,
+              bugReporter);
       skyframeExecutor.init();
       return skyframeExecutor;
     }
@@ -1119,6 +1124,11 @@
       return this;
     }
 
+    public Builder setBugReporter(BugReporter bugReporter) {
+      this.bugReporter = bugReporter;
+      return this;
+    }
+
     public Builder setExtraSkyFunctions(
         ImmutableMap<SkyFunctionName, SkyFunction> extraSkyFunctions) {
       this.extraSkyFunctions = extraSkyFunctions;
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java
index ac31891..568583a 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorFactory.java
@@ -18,6 +18,7 @@
 import com.google.devtools.build.lib.analysis.BlazeDirectories;
 import com.google.devtools.build.lib.analysis.WorkspaceStatusAction.Factory;
 import com.google.devtools.build.lib.analysis.config.BuildOptions;
+import com.google.devtools.build.lib.bugreport.BugReporter;
 import com.google.devtools.build.lib.packages.PackageFactory;
 import com.google.devtools.build.lib.vfs.FileSystem;
 import com.google.devtools.build.skyframe.SkyFunction;
@@ -45,7 +46,8 @@
       Iterable<? extends DiffAwareness.Factory> diffAwarenessFactories,
       ImmutableMap<SkyFunctionName, SkyFunction> extraSkyFunctions,
       Iterable<SkyValueDirtinessChecker> customDirtinessCheckers,
-      @Nullable ManagedDirectoriesKnowledge managedDirectoriesKnowledge) {
+      @Nullable ManagedDirectoriesKnowledge managedDirectoriesKnowledge,
+      BugReporter bugReporter) {
     return BazelSkyframeExecutorConstants.newBazelSkyframeExecutorBuilder()
         .setPkgFactory(pkgFactory)
         .setFileSystem(fileSystem)
@@ -57,6 +59,7 @@
         .setExtraSkyFunctions(extraSkyFunctions)
         .setCustomDirtinessCheckers(customDirtinessCheckers)
         .setManagedDirectoriesKnowledge(managedDirectoriesKnowledge)
+        .setBugReporter(bugReporter)
         .build();
   }
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
index 73aa6c7..d6f8d29 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java
@@ -100,6 +100,7 @@
 import com.google.devtools.build.lib.analysis.configuredtargets.MergedConfiguredTarget;
 import com.google.devtools.build.lib.analysis.starlark.StarlarkTransition;
 import com.google.devtools.build.lib.analysis.starlark.StarlarkTransition.TransitionException;
+import com.google.devtools.build.lib.bugreport.BugReporter;
 import com.google.devtools.build.lib.buildtool.BuildRequestOptions;
 import com.google.devtools.build.lib.cmdline.Label;
 import com.google.devtools.build.lib.cmdline.PackageIdentifier;
@@ -255,6 +256,8 @@
   protected final BlazeDirectories directories;
   protected final ExternalFilesHelper externalFilesHelper;
   private final GraphInconsistencyReceiver graphInconsistencyReceiver;
+  private final BugReporter bugReporter;
+
   /**
    * Measures source artifacts read this build. Does not include cached artifacts, so is less useful
    * on incremental builds.
@@ -422,7 +425,8 @@
       @Nullable PackageProgressReceiver packageProgress,
       @Nullable ConfiguredTargetProgressReceiver configuredTargetProgress,
       @Nullable NonexistentFileReceiver nonexistentFileReceiver,
-      @Nullable ManagedDirectoriesKnowledge managedDirectoriesKnowledge) {
+      @Nullable ManagedDirectoriesKnowledge managedDirectoriesKnowledge,
+      BugReporter bugReporter) {
     // Strictly speaking, these arguments are not required for initialization, but all current
     // callsites have them at hand, so we might as well set them during construction.
     this.skyframeExecutorConsumerOnInit = skyframeExecutorConsumerOnInit;
@@ -431,6 +435,7 @@
     this.shouldUnblockCpuWorkWhenFetchingDeps = shouldUnblockCpuWorkWhenFetchingDeps;
     this.graphInconsistencyReceiver = graphInconsistencyReceiver;
     this.nonexistentFileReceiver = nonexistentFileReceiver;
+    this.bugReporter = bugReporter;
     this.pkgFactory.setSyscalls(syscalls);
     this.workspaceStatusActionFactory = workspaceStatusActionFactory;
     this.packageManager =
@@ -601,11 +606,11 @@
     map.put(
         SkyFunctions.TARGET_COMPLETION,
         TargetCompletor.targetCompletionFunction(
-            pathResolverFactory, skyframeActionExecutor, topLevelArtifactsMetric));
+            pathResolverFactory, skyframeActionExecutor, topLevelArtifactsMetric, bugReporter));
     map.put(
         SkyFunctions.ASPECT_COMPLETION,
         AspectCompletor.aspectCompletionFunction(
-            pathResolverFactory, skyframeActionExecutor, topLevelArtifactsMetric));
+            pathResolverFactory, skyframeActionExecutor, topLevelArtifactsMetric, bugReporter));
     map.put(SkyFunctions.TEST_COMPLETION, new TestCompletionFunction());
     map.put(
         Artifact.ARTIFACT,
@@ -618,7 +623,7 @@
     map.put(SkyFunctions.BUILD_INFO, new WorkspaceStatusFunction(this::makeWorkspaceStatusAction));
     map.put(SkyFunctions.COVERAGE_REPORT, new CoverageReportFunction(actionKeyContext));
     ActionExecutionFunction actionExecutionFunction =
-        new ActionExecutionFunction(skyframeActionExecutor, directories, tsgm);
+        new ActionExecutionFunction(skyframeActionExecutor, directories, tsgm, bugReporter);
     map.put(SkyFunctions.ACTION_EXECUTION, actionExecutionFunction);
     this.actionExecutionFunction = actionExecutionFunction;
     map.put(SkyFunctions.ACTION_SKETCH, new ActionSketchFunction(actionKeyContext));
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorFactory.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorFactory.java
index 18fc008..dbc0e33 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorFactory.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutorFactory.java
@@ -17,6 +17,7 @@
 import com.google.devtools.build.lib.actions.ActionKeyContext;
 import com.google.devtools.build.lib.analysis.BlazeDirectories;
 import com.google.devtools.build.lib.analysis.WorkspaceStatusAction.Factory;
+import com.google.devtools.build.lib.bugreport.BugReporter;
 import com.google.devtools.build.lib.packages.PackageFactory;
 import com.google.devtools.build.lib.util.AbruptExitException;
 import com.google.devtools.build.lib.vfs.FileSystem;
@@ -35,6 +36,7 @@
    * @param fileSystem the Blaze file system
    * @param directories Blaze directories
    * @param workspaceStatusActionFactory a factory for creating WorkspaceStatusAction objects
+   * @param bugReporter BugReporter: always BugReporter.defaultInstance() outside of Java tests
    * @return an instance of the SkyframeExecutor
    * @throws AbruptExitException if the executor cannot be created
    */
@@ -47,6 +49,7 @@
       Iterable<? extends DiffAwareness.Factory> diffAwarenessFactories,
       ImmutableMap<SkyFunctionName, SkyFunction> extraSkyFunctions,
       Iterable<SkyValueDirtinessChecker> customDirtinessCheckers,
-      ManagedDirectoriesKnowledge managedDirectoriesKnowledge)
+      ManagedDirectoriesKnowledge managedDirectoriesKnowledge,
+      BugReporter bugReporter)
       throws AbruptExitException;
 }
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/TargetCompletor.java b/src/main/java/com/google/devtools/build/lib/skyframe/TargetCompletor.java
index daf7e63..ca5132d 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/TargetCompletor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/TargetCompletor.java
@@ -21,6 +21,7 @@
 import com.google.devtools.build.lib.analysis.TargetCompleteEvent;
 import com.google.devtools.build.lib.analysis.TopLevelArtifactHelper.ArtifactsInOutputGroup;
 import com.google.devtools.build.lib.analysis.TopLevelArtifactHelper.ArtifactsToBuild;
+import com.google.devtools.build.lib.bugreport.BugReporter;
 import com.google.devtools.build.lib.causes.Cause;
 import com.google.devtools.build.lib.causes.LabelCause;
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
@@ -46,12 +47,14 @@
   static SkyFunction targetCompletionFunction(
       PathResolverFactory pathResolverFactory,
       SkyframeActionExecutor skyframeActionExecutor,
-      MetadataConsumerForMetrics.FilesMetricConsumer topLevelArtifactsMetric) {
+      MetadataConsumerForMetrics.FilesMetricConsumer topLevelArtifactsMetric,
+      BugReporter bugReporter) {
     return new CompletionFunction<>(
         pathResolverFactory,
         new TargetCompletor(skyframeActionExecutor),
         skyframeActionExecutor,
-        topLevelArtifactsMetric);
+        topLevelArtifactsMetric,
+        bugReporter);
   }
 
   private TargetCompletor(SkyframeActionExecutor announceTargetSummaries) {
diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/BUILD b/src/test/java/com/google/devtools/build/lib/buildtool/BUILD
index 7e35691..7dd46cf 100644
--- a/src/test/java/com/google/devtools/build/lib/buildtool/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/buildtool/BUILD
@@ -201,6 +201,7 @@
     deps = [
         "//src/main/java/com/google/devtools/build/lib/actions",
         "//src/main/java/com/google/devtools/build/lib/skyframe:detailed_exceptions",
+        "//src/main/java/com/google/devtools/build/lib/util/io",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/protobuf:failure_details_java_proto",
@@ -604,6 +605,7 @@
         "//src/main/java/com/google/devtools/build/lib/skyframe:detailed_exceptions",
         "//src/main/java/com/google/devtools/build/lib/unix",
         "//src/main/java/com/google/devtools/build/lib/util:exit_code",
+        "//src/main/java/com/google/devtools/build/lib/util/io",
         "//src/main/java/com/google/devtools/build/lib/vfs",
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/protobuf:failure_details_java_proto",
diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/CustomRealFilesystemBuildIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/buildtool/CustomRealFilesystemBuildIntegrationTest.java
index 0f1ac98..84d31cb 100644
--- a/src/test/java/com/google/devtools/build/lib/buildtool/CustomRealFilesystemBuildIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/buildtool/CustomRealFilesystemBuildIntegrationTest.java
@@ -31,6 +31,7 @@
 import com.google.devtools.build.lib.testutil.TestUtils;
 import com.google.devtools.build.lib.unix.UnixFileSystem;
 import com.google.devtools.build.lib.util.ExitCode;
+import com.google.devtools.build.lib.util.io.RecordingOutErr;
 import com.google.devtools.build.lib.vfs.DigestHashFunction;
 import com.google.devtools.build.lib.vfs.Dirent;
 import com.google.devtools.build.lib.vfs.FileStatus;
@@ -150,6 +151,7 @@
   public void incrementalNonMandatoryInputIOException(
       @TestParameter boolean keepGoing, @TestParameter({"0", "1"}) int nestedSetOnSkyframe)
       throws Exception {
+    RecordingBugReporter bugReporter = recordBugReportsAndReinitialize();
     addOptions("--features=cc_include_scanning");
     addOptions("--keep_going=" + keepGoing);
     addOptions("--experimental_nested_set_as_skykey_threshold=" + nestedSetOnSkyframe);
@@ -157,18 +159,28 @@
     write("foo/foo.cc", "#include \"foo/foo.h\"");
     Path fooHFile = write("foo/foo.h", "//thisisacomment");
     buildTarget("//foo");
+    bugReporter.assertNoExceptions();
+
     write("foo/foo.cc", "//no include anymore");
     customFileSystem.alwaysError(fooHFile);
     if (keepGoing) {
       buildTarget("//foo");
+      bugReporter.assertNoExceptions();
     } else {
-      // TODO(b/166268889): fix this: this really crashes, not just a bug report!
-      assertThrows(RuntimeException.class, () -> buildTarget("//foo"));
+      RecordingOutErr outErr = new RecordingOutErr();
+      this.outErr = outErr;
+      BuildFailedException e = assertThrows(BuildFailedException.class, () -> buildTarget("//foo"));
+      assertDetailedExitCodeIsSourceIOFailure(e);
+      Throwable cause = bugReporter.getFirstCause();
+      assertThat(cause).hasMessageThat().isEqualTo("error reading file 'foo/foo.h': nope");
+      assertDetailedExitCodeIsSourceIOFailure(cause);
+      assertThat(outErr.errAsLatin1()).contains("error reading file 'foo/foo.h': nope");
     }
   }
 
   @Test
   public void unusedInputIOExceptionIncremental(@TestParameter boolean keepGoing) throws Exception {
+    RecordingBugReporter bugReporter = recordBugReportsAndReinitialize();
     addOptions("--keep_going=" + keepGoing);
     write(
         "foo/pruning.bzl",
@@ -201,28 +213,39 @@
         "build_rule(name = 'prune', inputs = ':unused.txt', executable = ':all_unused.sh')");
     Path unusedPath = write("foo/unused.txt");
     buildTarget("//foo:prune");
+    bugReporter.assertNoExceptions();
+
     customFileSystem.alwaysError(unusedPath);
     if (keepGoing) {
       buildTarget("//foo:prune");
+      bugReporter.assertNoExceptions();
     } else {
-      // TODO(b/166268889): fix.
-      RuntimeException e = assertThrows(RuntimeException.class, () -> buildTarget("//foo:prune"));
-      assertThat(e).hasCauseThat().isInstanceOf(DetailedException.class);
-      assertThat(e)
-          .hasCauseThat()
-          .hasMessageThat()
-          .isEqualTo("error reading file '//foo:unused.txt': nope");
-      assertThat(((DetailedException) e.getCause()).getDetailedExitCode().getFailureDetail())
-          .comparingExpectedFieldsOnly()
-          .isEqualTo(
-              FailureDetails.FailureDetail.newBuilder()
-                  .setExecution(
-                      FailureDetails.Execution.newBuilder()
-                          .setCode(FailureDetails.Execution.Code.SOURCE_INPUT_IO_EXCEPTION))
-                  .build());
+      RecordingOutErr outErr = new RecordingOutErr();
+      this.outErr = outErr;
+      BuildFailedException e =
+          assertThrows(BuildFailedException.class, () -> buildTarget("//foo:prune"));
+      assertDetailedExitCodeIsSourceIOFailure(e);
+      Throwable cause = bugReporter.getFirstCause();
+      assertThat(cause).hasMessageThat().isEqualTo("error reading file '//foo:unused.txt': nope");
+      assertDetailedExitCodeIsSourceIOFailure(cause);
+      assertThat(outErr.errAsLatin1()).contains("error reading file '//foo:unused.txt': nope");
     }
   }
 
+  private static final FailureDetails.FailureDetail SOURCE_IO_FAILURE =
+      FailureDetails.FailureDetail.newBuilder()
+          .setExecution(
+              FailureDetails.Execution.newBuilder()
+                  .setCode(FailureDetails.Execution.Code.SOURCE_INPUT_IO_EXCEPTION))
+          .build();
+
+  private static void assertDetailedExitCodeIsSourceIOFailure(Throwable exception) {
+    assertThat(exception).isInstanceOf(DetailedException.class);
+    assertThat(((DetailedException) exception).getDetailedExitCode().getFailureDetail())
+        .comparingExpectedFieldsOnly()
+        .isEqualTo(SOURCE_IO_FAILURE);
+  }
+
   /** Tests that IOExceptions encountered when not all discovered deps are done are handled. */
   @Test
   public void testIOException_missingNonMandatoryInput() throws Exception {
diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/UnusedInputsFailureIntegrationTest.java b/src/test/java/com/google/devtools/build/lib/buildtool/UnusedInputsFailureIntegrationTest.java
index 3373cd4..9fb1c96 100644
--- a/src/test/java/com/google/devtools/build/lib/buildtool/UnusedInputsFailureIntegrationTest.java
+++ b/src/test/java/com/google/devtools/build/lib/buildtool/UnusedInputsFailureIntegrationTest.java
@@ -21,6 +21,7 @@
 import com.google.devtools.build.lib.buildtool.util.BuildIntegrationTestCase;
 import com.google.devtools.build.lib.server.FailureDetails;
 import com.google.devtools.build.lib.skyframe.DetailedException;
+import com.google.devtools.build.lib.util.io.RecordingOutErr;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
 import com.google.testing.junit.testparameterinjector.TestParameter;
@@ -45,6 +46,7 @@
 
   @Test
   public void incrementalFailureOnUnusedInput() throws Exception {
+    RecordingBugReporter bugReporter = recordBugReportsAndReinitialize();
     write(
         "foo/pruning.bzl",
         "def _impl(ctx):",
@@ -80,24 +82,51 @@
         "genrule(name = 'gen', outs = ['in'], tools = [':gen_run.sh'], cmd = '$(location"
             + " :gen_run.sh) && touch $@')");
     buildTarget("//foo:foo");
+    bugReporter.assertNoExceptions();
+
     write("foo/gen_run.sh", "false");
     if (keepGoing) {
       buildTarget("//foo:foo");
+      bugReporter.assertNoExceptions();
     } else if (nestedSetOnSkyframe == 0) {
+      RecordingOutErr outErr = new RecordingOutErr();
+      this.outErr = outErr;
       // Not great, but what to do.
-      assertThrows(BuildFailedException.class, () -> buildTarget("//foo:foo"));
+      BuildFailedException e =
+          assertThrows(BuildFailedException.class, () -> buildTarget("//foo:foo"));
+      assertThat(e.getDetailedExitCode().getFailureDetail())
+          .comparingExpectedFieldsOnly()
+          .isEqualTo(
+              FailureDetails.FailureDetail.newBuilder()
+                  .setSpawn(
+                      FailureDetails.Spawn.newBuilder()
+                          .setCode(FailureDetails.Spawn.Code.NON_ZERO_EXIT))
+                  .build());
+      assertThat(outErr.errAsLatin1()).contains("Executing genrule //foo:gen failed");
+      bugReporter.assertNoExceptions();
     } else {
-      // TODO(b/159596514): fix.
-      RuntimeException e = assertThrows(RuntimeException.class, () -> buildTarget("//foo:foo"));
-      assertThat(e)
-          .hasCauseThat()
-          .hasMessageThat()
-          .contains("Error evaluating artifact nested set");
+      RecordingOutErr outErr = new RecordingOutErr();
+      this.outErr = outErr;
+      BuildFailedException e = assertThrows(BuildFailedException.class, () -> buildTarget("//foo"));
+      assertThat(e.getDetailedExitCode().getFailureDetail())
+          .comparingExpectedFieldsOnly()
+          .isEqualTo(
+              FailureDetails.FailureDetail.newBuilder()
+                  .setExecution(
+                      FailureDetails.Execution.newBuilder()
+                          .setCode(FailureDetails.Execution.Code.UNEXPECTED_EXCEPTION)
+                          .build())
+                  .build());
+      assertThat(outErr.errAsLatin1()).contains("Executing genrule //foo:gen failed");
+      Throwable cause = bugReporter.getFirstCause();
+      assertThat(cause).hasMessageThat().contains("Error evaluating artifact nested set");
+      assertThat(cause).hasMessageThat().contains("foo/gen_run.sh");
     }
   }
 
   @Test
   public void incrementalUnusedSymlinkCycle() throws Exception {
+    RecordingBugReporter bugReporter = recordBugReportsAndReinitialize();
     write(
         "foo/pruning.bzl",
         "def _impl(ctx):",
@@ -132,25 +161,40 @@
         "load('//foo:pruning.bzl', 'build_rule')",
         "build_rule(name = 'prune', inputs = ':in', executable = ':all_unused.sh')");
     buildTarget("//foo:prune");
+    bugReporter.assertNoExceptions();
+
     inPath.delete();
     inPath.createSymbolicLink(PathFragment.create("in"));
     if (keepGoing) {
       buildTarget("//foo:prune");
+      bugReporter.assertNoExceptions();
     } else {
-      // TODO(b/159596514): fix.
-      RuntimeException e = assertThrows(RuntimeException.class, () -> buildTarget("//foo:prune"));
-      assertThat(e).hasCauseThat().isInstanceOf(DetailedException.class);
-      assertThat(((DetailedException) e.getCause()).getDetailedExitCode().getFailureDetail())
-          .comparingExpectedFieldsOnly()
-          .isEqualTo(
-              FailureDetails.FailureDetail.newBuilder()
-                  .setExecution(
-                      FailureDetails.Execution.newBuilder()
-                          .setCode(FailureDetails.Execution.Code.SOURCE_INPUT_IO_EXCEPTION))
-                  .build());
+      RecordingOutErr outErr = new RecordingOutErr();
+      this.outErr = outErr;
+      BuildFailedException e =
+          assertThrows(BuildFailedException.class, () -> buildTarget("//foo:prune"));
+      assertDetailedExitCodeIsSourceIOFailure(e);
+      Throwable cause = bugReporter.getFirstCause();
+      assertDetailedExitCodeIsSourceIOFailure(cause);
+      assertThat(cause).hasMessageThat().isEqualTo("error reading file '//foo:in': Symlink cycle");
+      assertThat(outErr.errAsLatin1()).contains("error reading file '//foo:in': Symlink cycle");
     }
   }
 
+  private static final FailureDetails.FailureDetail SOURCE_IO_FAILURE =
+      FailureDetails.FailureDetail.newBuilder()
+          .setExecution(
+              FailureDetails.Execution.newBuilder()
+                  .setCode(FailureDetails.Execution.Code.SOURCE_INPUT_IO_EXCEPTION))
+          .build();
+
+  private static void assertDetailedExitCodeIsSourceIOFailure(Throwable exception) {
+    assertThat(exception).isInstanceOf(DetailedException.class);
+    assertThat(((DetailedException) exception).getDetailedExitCode().getFailureDetail())
+        .comparingExpectedFieldsOnly()
+        .isEqualTo(SOURCE_IO_FAILURE);
+  }
+
   @Test
   public void incrementalUnusedDanglingSymlink() throws Exception {
     write(
diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/util/BuildIntegrationTestCase.java b/src/test/java/com/google/devtools/build/lib/buildtool/util/BuildIntegrationTestCase.java
index 65dfd1a..dea2b7e 100644
--- a/src/test/java/com/google/devtools/build/lib/buildtool/util/BuildIntegrationTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/buildtool/util/BuildIntegrationTestCase.java
@@ -14,9 +14,11 @@
 
 package com.google.devtools.build.lib.buildtool.util;
 
+import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
 import static com.google.common.base.Throwables.throwIfUnchecked;
 import static com.google.common.collect.ImmutableSet.toImmutableSet;
+import static com.google.common.truth.Truth.assertThat;
 import static com.google.common.truth.Truth.assertWithMessage;
 import static org.junit.Assert.fail;
 
@@ -47,6 +49,10 @@
 import com.google.devtools.build.lib.analysis.util.AnalysisMock;
 import com.google.devtools.build.lib.analysis.util.AnalysisTestUtil;
 import com.google.devtools.build.lib.analysis.util.AnalysisTestUtil.DummyWorkspaceStatusActionContext;
+import com.google.devtools.build.lib.bugreport.BugReport;
+import com.google.devtools.build.lib.bugreport.BugReporter;
+import com.google.devtools.build.lib.bugreport.Crash;
+import com.google.devtools.build.lib.bugreport.CrashContext;
 import com.google.devtools.build.lib.buildtool.BuildRequest;
 import com.google.devtools.build.lib.buildtool.BuildResult;
 import com.google.devtools.build.lib.buildtool.BuildTool;
@@ -107,11 +113,13 @@
 import com.google.devtools.common.options.OptionsBase;
 import com.google.devtools.common.options.OptionsParser;
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 import java.util.Optional;
 import java.util.Set;
+import javax.annotation.concurrent.GuardedBy;
 import org.junit.After;
 import org.junit.Before;
 
@@ -151,6 +159,7 @@
   protected BlazeDirectories directories;
   protected MockToolsConfig mockToolsConfig;
   protected BinTools binTools;
+  private BugReporter bugReporter = BugReporter.defaultInstance();
 
   protected BlazeRuntimeWrapper runtimeWrapper;
   protected Path outputBase;
@@ -217,6 +226,35 @@
     setupOptions();
   }
 
+  /**
+   * Configures the server to record bug reports using the returned {@link RecordingBugReporter}.
+   *
+   * <p>The server is reinitialized so that this change is picked up.
+   */
+  protected final RecordingBugReporter recordBugReportsAndReinitialize() throws Exception {
+    RecordingBugReporter recordingBugReporter = new RecordingBugReporter();
+    setCustomBugReporterAndReinitialize(recordingBugReporter);
+    return recordingBugReporter;
+  }
+
+  /**
+   * Configures the server to record bug reports using the given {@link BugReporter}.
+   *
+   * <p>The server is reinitialized so that this change is picked up.
+   */
+  protected final void setCustomBugReporterAndReinitialize(BugReporter bugReporter)
+      throws Exception {
+    this.bugReporter = checkNotNull(bugReporter);
+    reinitializeAndPreserveOptions();
+  }
+
+  protected final void reinitializeAndPreserveOptions() throws Exception {
+    List<String> options = runtimeWrapper.getOptions();
+    createFilesAndMocks();
+    runtimeWrapper.resetOptions();
+    runtimeWrapper.addOptions(options);
+  }
+
   protected void runPriorToBeforeMethods() throws Exception {
     // Allows tests such as SkyframeIntegrationInvalidationTest to execute code before all @Before
     // methods are being run.
@@ -370,6 +408,7 @@
     return new BlazeRuntime.Builder()
         .setFileSystem(fileSystem)
         .setProductName(TestConstants.PRODUCT_NAME)
+        .setBugReporter(bugReporter)
         .setStartupOptionsProvider(startupOptionsParser)
         .addBlazeModule(connectivityModule)
         .addBlazeModule(getNoResolvedFileModule())
@@ -818,4 +857,41 @@
     }
     fail("didn't find expected error: \"" + expectedError + "\"");
   }
+
+  /** {@link BugReporter} that stores bug reports for later inspection. */
+  protected static final class RecordingBugReporter implements BugReporter {
+    @GuardedBy("this")
+    private final List<Throwable> exceptions = new ArrayList<>();
+
+    @Override
+    public synchronized void sendBugReport(
+        Throwable exception, List<String> args, String... values) {
+      exceptions.add(exception);
+    }
+
+    @Override
+    public void handleCrash(Crash crash, CrashContext ctx) {
+      // Unexpected: try to crash JVM.
+      BugReport.handleCrash(crash, ctx);
+    }
+
+    public synchronized ImmutableList<Throwable> getExceptions() {
+      return ImmutableList.copyOf(exceptions);
+    }
+
+    public synchronized Throwable getFirstCause() {
+      assertThat(exceptions).isNotEmpty();
+      Throwable first = exceptions.get(0);
+      assertThat(first).hasCauseThat().isNotNull();
+      return first.getCause();
+    }
+
+    public synchronized void assertNoExceptions() {
+      assertThat(exceptions).isEmpty();
+    }
+
+    public synchronized void clear() {
+      exceptions.clear();
+    }
+  }
 }
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/AbstractCollectPackagesUnderDirectoryTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/AbstractCollectPackagesUnderDirectoryTest.java
index 11d5aaa..d388908 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/AbstractCollectPackagesUnderDirectoryTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/AbstractCollectPackagesUnderDirectoryTest.java
@@ -23,6 +23,7 @@
 import com.google.devtools.build.lib.analysis.BlazeDirectories;
 import com.google.devtools.build.lib.analysis.ConfiguredRuleClassProvider;
 import com.google.devtools.build.lib.analysis.ServerDirectories;
+import com.google.devtools.build.lib.bugreport.BugReporter;
 import com.google.devtools.build.lib.clock.BlazeClock;
 import com.google.devtools.build.lib.cmdline.RepositoryName;
 import com.google.devtools.build.lib.events.EventCollector;
@@ -293,7 +294,8 @@
                 /*diffAwarenessFactories=*/ ImmutableList.of(),
                 getExtraSkyFunctions(),
                 /*customDirtinessCheckers=*/ ImmutableList.of(),
-                /*managedDirectoriesKnowledge=*/ null);
+                /*managedDirectoriesKnowledge=*/ null,
+                BugReporter.defaultInstance());
     skyframeExecutor.injectExtraPrecomputedValues(
         ImmutableList.of(
             PrecomputedValue.injected(
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
index ce3e83c..b0b3396 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -148,6 +148,7 @@
         "//src/main/java/com/google/devtools/build/lib/analysis/platform",
         "//src/main/java/com/google/devtools/build/lib/bazel:main",
         "//src/main/java/com/google/devtools/build/lib/bazel/rules",
+        "//src/main/java/com/google/devtools/build/lib/bugreport",
         "//src/main/java/com/google/devtools/build/lib/causes",
         "//src/main/java/com/google/devtools/build/lib/clock",
         "//src/main/java/com/google/devtools/build/lib/cmdline",
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java b/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
index 6b07373..0ad0a5e 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutorTest.java
@@ -79,6 +79,7 @@
 import com.google.devtools.build.lib.analysis.TransitiveInfoProvider;
 import com.google.devtools.build.lib.analysis.config.CoreOptions;
 import com.google.devtools.build.lib.analysis.util.BuildViewTestCase;
+import com.google.devtools.build.lib.bugreport.BugReporter;
 import com.google.devtools.build.lib.buildtool.BuildRequestOptions;
 import com.google.devtools.build.lib.buildtool.SkyframeBuilder;
 import com.google.devtools.build.lib.clock.BlazeClock;
@@ -1590,7 +1591,8 @@
             null,
             ModifiedFileSet.EVERYTHING_MODIFIED,
             /* fileCache= */ null,
-            ActionInputPrefetcher.NONE);
+            ActionInputPrefetcher.NONE,
+            BugReporter.defaultInstance());
     Set<ConfiguredTargetKey> builtTargets = new HashSet<>();
     Set<AspectKey> builtAspects = new HashSet<>();
     // Note that since ImmutableSet iterates through its elements in the order they are passed in
@@ -1727,7 +1729,8 @@
             null,
             ModifiedFileSet.EVERYTHING_MODIFIED,
             /*fileCache=*/ null,
-            ActionInputPrefetcher.NONE);
+            ActionInputPrefetcher.NONE,
+            BugReporter.defaultInstance());
     Set<ConfiguredTargetKey> builtTargets = new HashSet<>();
     Set<AspectKey> builtAspects = new HashSet<>();
     Set<Artifact> normalArtifacts = ImmutableSet.of(topArtifact);
@@ -1853,7 +1856,8 @@
             null,
             ModifiedFileSet.EVERYTHING_MODIFIED,
             /*fileCache=*/ null,
-            ActionInputPrefetcher.NONE);
+            ActionInputPrefetcher.NONE,
+            BugReporter.defaultInstance());
     Set<ConfiguredTargetKey> builtTargets = new HashSet<>();
     Set<AspectKey> builtAspects = new HashSet<>();
     BuildFailedException e =
@@ -1968,7 +1972,8 @@
             null,
             ModifiedFileSet.EVERYTHING_MODIFIED,
             /* fileCache= */ null,
-            ActionInputPrefetcher.NONE);
+            ActionInputPrefetcher.NONE,
+            BugReporter.defaultInstance());
     Set<ConfiguredTargetKey> builtTargets = new HashSet<>();
     Set<AspectKey> builtAspects = new HashSet<>();
     // Note that since ImmutableSet iterates through its elements in the order they are passed in
@@ -2076,7 +2081,8 @@
             null,
             ModifiedFileSet.EVERYTHING_MODIFIED,
             /* fileCache= */ null,
-            ActionInputPrefetcher.NONE);
+            ActionInputPrefetcher.NONE,
+            BugReporter.defaultInstance());
     Set<ConfiguredTargetKey> builtTargets = new HashSet<>();
     Set<AspectKey> builtAspects = new HashSet<>();
     Set<Artifact> normalArtifacts = ImmutableSet.of(succeededOutput, failedOutput);
@@ -2174,7 +2180,8 @@
             null,
             ModifiedFileSet.EVERYTHING_MODIFIED,
             /* fileCache= */ null,
-            ActionInputPrefetcher.NONE);
+            ActionInputPrefetcher.NONE,
+            BugReporter.defaultInstance());
     Set<ConfiguredTargetKey> builtTargets = new HashSet<>();
     Set<AspectKey> builtAspects = new HashSet<>();
     Set<Artifact> normalArtifacts = ImmutableSet.of(failedOutput1, failedOutput2);
@@ -2257,7 +2264,8 @@
             null,
             ModifiedFileSet.EVERYTHING_MODIFIED,
             /*fileCache=*/ null,
-            ActionInputPrefetcher.NONE);
+            ActionInputPrefetcher.NONE,
+            BugReporter.defaultInstance());
     builder.buildArtifacts(
         reporter,
         ImmutableSet.of(topOutput),
diff --git a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
index 9898eda..71e5434 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/TimestampBuilderTestCase.java
@@ -60,6 +60,7 @@
 import com.google.devtools.build.lib.analysis.ConfiguredTarget;
 import com.google.devtools.build.lib.analysis.ServerDirectories;
 import com.google.devtools.build.lib.analysis.TopLevelArtifactContext;
+import com.google.devtools.build.lib.bugreport.BugReporter;
 import com.google.devtools.build.lib.buildtool.BuildRequestOptions;
 import com.google.devtools.build.lib.buildtool.SkyframeBuilder;
 import com.google.devtools.build.lib.clock.BlazeClock;
@@ -270,7 +271,11 @@
                     new ArtifactFunction(() -> true, MetadataConsumerForMetrics.NO_OP))
                 .put(
                     SkyFunctions.ACTION_EXECUTION,
-                    new ActionExecutionFunction(skyframeActionExecutor, directories, tsgmRef))
+                    new ActionExecutionFunction(
+                        skyframeActionExecutor,
+                        directories,
+                        tsgmRef,
+                        BugReporter.defaultInstance()))
                 .put(
                     SkyFunctions.PACKAGE,
                     new PackageFunction(null, null, null, null, null, null, null))
@@ -395,7 +400,9 @@
             throw new BuildFailedException(
                 null, createDetailedExitCode(Code.NON_ACTION_EXECUTION_FAILURE));
           } else {
-            SkyframeBuilder.rethrow(Preconditions.checkNotNull(result.getError().getException()));
+            SkyframeBuilder.rethrow(
+                Preconditions.checkNotNull(result.getError().getException()),
+                BugReporter.defaultInstance());
           }
         }
       }
