diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/util/BUILD b/src/test/java/com/google/devtools/build/lib/buildtool/util/BUILD
index a0b4989..6aabf63 100644
--- a/src/test/java/com/google/devtools/build/lib/buildtool/util/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/buildtool/util/BUILD
@@ -76,7 +76,6 @@
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:command",
         "//src/main/java/com/google/devtools/build/lib/util:detailed_exit_code",
-        "//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/util/io:out-err",
         "//src/main/java/com/google/devtools/build/lib/vfs",
@@ -84,6 +83,7 @@
         "//src/main/java/com/google/devtools/build/lib/vfs:pathfragment",
         "//src/main/java/com/google/devtools/common/options",
         "//src/main/java/com/google/devtools/common/options:invocation_policy",
+        "//src/main/protobuf:failure_details_java_proto",
         "//src/main/protobuf:invocation_policy_java_proto",
         "//src/test/java/com/google/devtools/build/lib/actions/util",
         "//src/test/java/com/google/devtools/build/lib/analysis/util",
diff --git a/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java b/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java
index fe515c5..826e3e3 100644
--- a/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java
+++ b/src/test/java/com/google/devtools/build/lib/buildtool/util/BlazeRuntimeWrapper.java
@@ -56,9 +56,11 @@
 import com.google.devtools.build.lib.runtime.commands.BuildCommand;
 import com.google.devtools.build.lib.runtime.proto.InvocationPolicyOuterClass.InvocationPolicy;
 import com.google.devtools.build.lib.sandbox.SandboxOptions;
+import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
+import com.google.devtools.build.lib.server.FailureDetails.Spawn;
+import com.google.devtools.build.lib.server.FailureDetails.Spawn.Code;
 import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
 import com.google.devtools.build.lib.util.DetailedExitCode;
-import com.google.devtools.build.lib.util.ExitCode;
 import com.google.devtools.build.lib.util.io.OutErr;
 import com.google.devtools.build.lib.vfs.OutputService;
 import com.google.devtools.common.options.InvocationPolicyEnforcer;
@@ -367,7 +369,7 @@
             null,
             success
                 ? DetailedExitCode.success()
-                : DetailedExitCode.justExitCode(ExitCode.BUILD_FAILURE),
+                : DetailedExitCode.of(createGenericDetailedFailure()),
             /*startSuspendCount=*/ 0);
         getSkyframeExecutor().notifyCommandComplete(env.getReporter());
       }
@@ -378,6 +380,12 @@
     }
   }
 
+  private static FailureDetail createGenericDetailedFailure() {
+    return FailureDetail.newBuilder()
+        .setSpawn(Spawn.newBuilder().setCode(Code.NON_ZERO_EXIT))
+        .build();
+  }
+
   public BuildRequest createRequest(String commandName, List<String> targets) {
     return BuildRequest.create(
         commandName,
diff --git a/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java b/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
index 2922b69..12e29b7 100644
--- a/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
+++ b/src/test/java/com/google/devtools/build/lib/runtime/BuildEventStreamerTest.java
@@ -68,9 +68,11 @@
 import com.google.devtools.build.lib.collect.nestedset.NestedSet;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
 import com.google.devtools.build.lib.collect.nestedset.NestedSetView;
+import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
+import com.google.devtools.build.lib.server.FailureDetails.Spawn;
+import com.google.devtools.build.lib.server.FailureDetails.Spawn.Code;
 import com.google.devtools.build.lib.testutil.FoundationTestCase;
 import com.google.devtools.build.lib.util.DetailedExitCode;
-import com.google.devtools.build.lib.util.ExitCode;
 import com.google.devtools.build.lib.util.Pair;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.PathFragment;
@@ -1222,7 +1224,7 @@
                 ProgressEvent.INITIAL_PROGRESS_UPDATE,
                 BuildEventIdUtil.buildFinished()));
     BuildCompleteEvent buildCompleteEvent =
-        buildCompleteEvent(ExitCode.BUILD_FAILURE, true, null, false);
+        buildCompleteEvent(createGenericDetailedExitCode(), true, null, false);
 
     streamer.buildEvent(startEvent);
     streamer.buildEvent(buildCompleteEvent);
@@ -1246,7 +1248,7 @@
                 ProgressEvent.INITIAL_PROGRESS_UPDATE,
                 BuildEventIdUtil.buildFinished()));
     BuildCompleteEvent buildCompleteEvent =
-        buildCompleteEvent(ExitCode.BUILD_FAILURE, true, new RuntimeException(), false);
+        buildCompleteEvent(createGenericDetailedExitCode(), true, new RuntimeException(), false);
 
     streamer.buildEvent(startEvent);
     streamer.buildEvent(buildCompleteEvent);
@@ -1270,7 +1272,7 @@
                 ProgressEvent.INITIAL_PROGRESS_UPDATE,
                 BuildEventIdUtil.buildFinished()));
     BuildCompleteEvent buildCompleteEvent =
-        buildCompleteEvent(ExitCode.BUILD_FAILURE, true, null, true);
+        buildCompleteEvent(createGenericDetailedExitCode(), true, null, true);
 
     streamer.buildEvent(startEvent);
     streamer.buildEvent(buildCompleteEvent);
@@ -1321,7 +1323,7 @@
                 ProgressEvent.INITIAL_PROGRESS_UPDATE,
                 BuildEventIdUtil.buildFinished()));
     BuildCompleteEvent buildCompleteEvent =
-        buildCompleteEvent(ExitCode.BUILD_FAILURE, false, new RuntimeException(), false);
+        buildCompleteEvent(createGenericDetailedExitCode(), false, new RuntimeException(), false);
 
     streamer.buildEvent(startEvent);
     streamer.noAnalyze(new NoAnalyzeEvent());
@@ -1345,9 +1347,12 @@
   }
 
   private BuildCompleteEvent buildCompleteEvent(
-      ExitCode exitCode, boolean stopOnFailure, Throwable crash, boolean catastrophe) {
+      DetailedExitCode detailedExitCode,
+      boolean stopOnFailure,
+      Throwable crash,
+      boolean catastrophe) {
     BuildResult result = new BuildResult(0);
-    result.setDetailedExitCode(DetailedExitCode.justExitCode(exitCode));
+    result.setDetailedExitCode(detailedExitCode);
     result.setStopOnFirstFailure(stopOnFailure);
     if (catastrophe) {
       result.setCatastrophe();
@@ -1423,4 +1428,11 @@
                 .collect(ImmutableList.toImmutableList()))
         .containsExactly(testPath1.toString(), testPath2.toString());
   }
+
+  private static DetailedExitCode createGenericDetailedExitCode() {
+    return DetailedExitCode.of(
+        FailureDetail.newBuilder()
+            .setSpawn(Spawn.newBuilder().setCode(Code.NON_ZERO_EXIT))
+            .build());
+  }
 }
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 6d32070..67a7cd7 100644
--- a/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
+++ b/src/test/java/com/google/devtools/build/lib/skyframe/BUILD
@@ -235,7 +235,6 @@
         "//src/main/java/com/google/devtools/build/lib/util",
         "//src/main/java/com/google/devtools/build/lib/util:abrupt_exit_exception",
         "//src/main/java/com/google/devtools/build/lib/util:detailed_exit_code",
-        "//src/main/java/com/google/devtools/build/lib/util:exit_code",
         "//src/main/java/com/google/devtools/build/lib/util:filetype",
         "//src/main/java/com/google/devtools/build/lib/util/io",
         "//src/main/java/com/google/devtools/build/lib/util/io:out-err",
@@ -247,6 +246,7 @@
         "//src/main/java/com/google/devtools/common/options",
         "//src/main/protobuf:action_cache_java_proto",
         "//src/main/protobuf:analysis_java_proto",
+        "//src/main/protobuf:failure_details_java_proto",
         "//src/test/java/com/google/devtools/build/lib/actions/util",
         "//src/test/java/com/google/devtools/build/lib/analysis/testing",
         "//src/test/java/com/google/devtools/build/lib/analysis/util",
@@ -260,7 +260,6 @@
         "//src/test/java/com/google/devtools/build/lib/testutil:TestConstants",
         "//src/test/java/com/google/devtools/build/lib/testutil:TestPackageFactoryBuilderFactory",
         "//src/test/java/com/google/devtools/build/lib/testutil:TestUtils",
-        "//src/test/java/com/google/devtools/build/lib/util/subjects",
         "//src/test/java/com/google/devtools/build/lib/vfs/util",
         "//src/test/java/com/google/devtools/build/skyframe:testutil",
         "//third_party:auto_value",
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 2a22426..d9b8ad5 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
@@ -21,7 +21,6 @@
 import static com.google.devtools.build.lib.testutil.MoreAsserts.assertContainsEventRegex;
 import static com.google.devtools.build.lib.testutil.MoreAsserts.assertEventCount;
 import static com.google.devtools.build.lib.testutil.MoreAsserts.assertNotContainsEventRegex;
-import static com.google.devtools.build.lib.util.subjects.DetailedExitCodeSubjectFactory.assertThatDetailedExitCode;
 import static java.nio.charset.StandardCharsets.UTF_8;
 import static org.junit.Assert.assertThrows;
 import static org.junit.Assert.fail;
@@ -105,6 +104,10 @@
 import com.google.devtools.build.lib.pkgcache.TransitivePackageLoader;
 import com.google.devtools.build.lib.remote.options.RemoteOutputsMode;
 import com.google.devtools.build.lib.runtime.KeepGoingOption;
+import com.google.devtools.build.lib.server.FailureDetails.Crash;
+import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
+import com.google.devtools.build.lib.server.FailureDetails.Spawn;
+import com.google.devtools.build.lib.server.FailureDetails.Spawn.Code;
 import com.google.devtools.build.lib.skyframe.AspectValueKey.AspectKey;
 import com.google.devtools.build.lib.skyframe.DirtinessCheckerUtils.BasicFilesystemDirtinessChecker;
 import com.google.devtools.build.lib.skyframe.SkyframeActionExecutor.ActionCompletedReceiver;
@@ -119,7 +122,6 @@
 import com.google.devtools.build.lib.testutil.MoreAsserts;
 import com.google.devtools.build.lib.testutil.TestUtils;
 import com.google.devtools.build.lib.util.DetailedExitCode;
-import com.google.devtools.build.lib.util.ExitCode;
 import com.google.devtools.build.lib.util.Fingerprint;
 import com.google.devtools.build.lib.util.io.TimestampGranularityMonitor;
 import com.google.devtools.build.lib.vfs.FileSystemUtils;
@@ -167,6 +169,18 @@
 /** Tests for {@link SequencedSkyframeExecutor}. */
 @RunWith(JUnit4.class)
 public final class SequencedSkyframeExecutorTest extends BuildViewTestCase {
+
+  private static final DetailedExitCode USER_DETAILED_EXIT_CODE =
+      DetailedExitCode.of(
+          FailureDetail.newBuilder()
+              .setSpawn(Spawn.newBuilder().setCode(Code.NON_ZERO_EXIT))
+              .build());
+  private static final DetailedExitCode INFRA_DETAILED_EXIT_CODE =
+      DetailedExitCode.of(
+          FailureDetail.newBuilder()
+              .setCrash(Crash.newBuilder().setCode(Crash.Code.CRASH_UNKNOWN))
+              .build());
+
   private TransitivePackageLoader visitor;
   private OptionsParser options;
 
@@ -1453,7 +1467,11 @@
 
   /** Dummy action that throws a catastrophic error when it runs. */
   private static class CatastrophicAction extends DummyAction {
-    public static final ExitCode expectedExitCode = ExitCode.RESERVED;
+    public static final DetailedExitCode expectedDetailedExitCode =
+        DetailedExitCode.of(
+            FailureDetail.newBuilder()
+                .setCrash(Crash.newBuilder().setCode(Crash.Code.CRASH_UNKNOWN))
+                .build());
 
     CatastrophicAction(Artifact output) {
       super(NestedSetBuilder.emptySet(Order.STABLE_ORDER), output, MiddlemanType.NORMAL);
@@ -1467,7 +1485,7 @@
           new Exception("just cause"),
           this,
           /*catastrophe=*/ true,
-          DetailedExitCode.justExitCode(expectedExitCode));
+          expectedDetailedExitCode);
     }
   }
 
@@ -1565,8 +1583,7 @@
                     /* trustRemoteArtifacts= */ false));
     // The catastrophic exception should be propagated into the BuildFailedException whether or not
     // --keep_going is set.
-    assertThatDetailedExitCode(e.getDetailedExitCode())
-        .hasExitCode(CatastrophicAction.expectedExitCode);
+    assertThat(e.getDetailedExitCode()).isEqualTo(CatastrophicAction.expectedDetailedExitCode);
     assertThat(builtTargets).isEmpty();
     assertThat(markerRan.get()).isFalse();
   }
@@ -1624,7 +1641,7 @@
     Artifact failureArtifact =
         new Artifact.DerivedArtifact(
             ArtifactRoot.asDerivedRoot(root, "out"), execPath.getRelative("fail"), failureCTK);
-    Action failureAction = new FailedExecAction(failureArtifact, ExitCode.RESERVED);
+    Action failureAction = new FailedExecAction(failureArtifact, USER_DETAILED_EXIT_CODE);
     ConfiguredTargetValue failureCTV = createConfiguredTargetValue(failureAction, failureCTK);
     ActionLookupValue.ActionLookupKey topCTK = new InjectedActionLookupKey("top");
     Artifact topArtifact =
@@ -1696,8 +1713,7 @@
                     /* trustRemoteArtifacts= */ false));
     // The catastrophic exception should be propagated into the BuildFailedException whether or not
     // --keep_going is set.
-    assertThatDetailedExitCode(e.getDetailedExitCode())
-        .hasExitCode(CatastrophicAction.expectedExitCode);
+    assertThat(e.getDetailedExitCode()).isEqualTo(CatastrophicAction.expectedDetailedExitCode);
     assertThat(builtTargets).isEmpty();
   }
 
@@ -1742,7 +1758,7 @@
               execPath.getRelative(failString),
               configuredTargetKey);
       failedArtifacts.add(failureArtifact);
-      failedActions.add(new FailedExecAction(failureArtifact, ExitCode.BUILD_FAILURE));
+      failedActions.add(new FailedExecAction(failureArtifact, USER_DETAILED_EXIT_CODE));
     }
     NonRuleConfiguredTargetValue nonRuleConfiguredTargetValue =
         new NonRuleConfiguredTargetValue(
@@ -1828,8 +1844,7 @@
                     /* trustRemoteArtifacts= */ false));
     // The catastrophic exception should be propagated into the BuildFailedException whether or not
     // --keep_going is set.
-    assertThatDetailedExitCode(e.getDetailedExitCode())
-        .hasExitCode(CatastrophicAction.expectedExitCode);
+    assertThat(e.getDetailedExitCode()).isEqualTo(CatastrophicAction.expectedDetailedExitCode);
     assertThat(builtTargets).isEmpty();
   }
 
@@ -1935,36 +1950,27 @@
                     /* trustRemoteArtifacts= */ false));
     // The catastrophic exception should be propagated into the BuildFailedException whether or not
     // --keep_going is set.
-    assertThatDetailedExitCode(e.getDetailedExitCode())
-        .hasExitCode(CatastrophicAction.expectedExitCode);
+    assertThat(e.getDetailedExitCode()).isEqualTo(CatastrophicAction.expectedDetailedExitCode);
     assertThat(builtTargets).isEmpty();
   }
 
   /** Dummy action that throws a ActionExecution error when it runs. */
   private static class FailedExecAction extends DummyAction {
-    private final ExitCode exitCode;
+    private final DetailedExitCode detailedExitCode;
 
-    FailedExecAction(Artifact output, ExitCode exitCode) {
+    FailedExecAction(Artifact output, DetailedExitCode detailedExitCode) {
       super(NestedSetBuilder.emptySet(Order.STABLE_ORDER), output, MiddlemanType.NORMAL);
-      this.exitCode = exitCode;
+      this.detailedExitCode = detailedExitCode;
     }
 
     @Override
     public ActionResult execute(ActionExecutionContext actionExecutionContext)
         throws ActionExecutionException {
       throw new ActionExecutionException(
-          "foo",
-          new Exception("bar"),
-          this,
-          /*catastrophe=*/ false,
-          DetailedExitCode.justExitCode(exitCode));
+          "foo", new Exception("bar"), this, /*catastrophe=*/ false, detailedExitCode);
     }
   }
 
-  private static final ExitCode USER_EXIT_CODE = ExitCode.create(Integer.MAX_VALUE, "user_error");
-  private static final ExitCode INFRA_EXIT_CODE =
-      ExitCode.createInfrastructureFailure(Integer.MAX_VALUE - 1, "infra_error");
-
   /**
    * Verify SkyframeBuilder returns correct user error code as global error code when:
    *    1. keepGoing mode is true.
@@ -1994,7 +2000,7 @@
         new DummyAction(NestedSetBuilder.emptySet(Order.STABLE_ORDER), succeededOutput);
     ConfiguredTargetValue succeededTarget =
         createConfiguredTargetValue(succeededAction, succeededKey);
-    Action failedAction = new FailedExecAction(failedOutput, USER_EXIT_CODE);
+    Action failedAction = new FailedExecAction(failedOutput, USER_DETAILED_EXIT_CODE);
     ConfiguredTargetValue failedTarget = createConfiguredTargetValue(failedAction, failedKey);
 
     // Inject the targets into the graph,
@@ -2047,7 +2053,7 @@
                     /* trustRemoteArtifacts= */ false));
     // The exit code should be propagated into the BuildFailedException whether or not --keep_going
     // is set.
-    assertThatDetailedExitCode(e.getDetailedExitCode()).hasExitCode(USER_EXIT_CODE);
+    assertThat(e.getDetailedExitCode()).isEqualTo(USER_DETAILED_EXIT_CODE);
   }
 
   /**
@@ -2085,9 +2091,9 @@
         new DummyAction(NestedSetBuilder.emptySet(Order.STABLE_ORDER), succeededOutput);
     ConfiguredTargetValue succeededTarget =
         createConfiguredTargetValue(succeededAction, succeededKey);
-    Action failedAction1 = new FailedExecAction(failedOutput1, USER_EXIT_CODE);
+    Action failedAction1 = new FailedExecAction(failedOutput1, USER_DETAILED_EXIT_CODE);
     ConfiguredTargetValue failedTarget1 = createConfiguredTargetValue(failedAction1, failedKey1);
-    Action failedAction2 = new FailedExecAction(failedOutput2, INFRA_EXIT_CODE);
+    Action failedAction2 = new FailedExecAction(failedOutput2, INFRA_DETAILED_EXIT_CODE);
     ConfiguredTargetValue failedTarget2 = createConfiguredTargetValue(failedAction2, failedKey2);
 
     // Inject the targets into the graph,
@@ -2141,7 +2147,7 @@
                     /* trustRemoteArtifacts= */ false));
     // The exit code should be propagated into the BuildFailedException whether or not --keep_going
     // is set.
-    assertThatDetailedExitCode(e.getDetailedExitCode()).hasExitCode(INFRA_EXIT_CODE);
+    assertThat(e.getDetailedExitCode()).isEqualTo(INFRA_DETAILED_EXIT_CODE);
   }
 
   /**
