Stop manually overriding failure detail's coarse exit code in SpawnExecException#toDetailedExitCode. Instead, trust it. This requires changing some failure codes' associated coarse exit codes so that they are properly categorized: a code like Spawn#EXEC_FAILED that is associated with a "system" error status needs to have an exit code of 34 to reflect that.

#11151

PiperOrigin-RevId: 335648755
diff --git a/src/test/java/com/google/devtools/build/lib/actions/SpawnResultTest.java b/src/test/java/com/google/devtools/build/lib/actions/SpawnResultTest.java
index 108bf66..fee0304 100644
--- a/src/test/java/com/google/devtools/build/lib/actions/SpawnResultTest.java
+++ b/src/test/java/com/google/devtools/build/lib/actions/SpawnResultTest.java
@@ -18,6 +18,9 @@
 
 import com.google.devtools.build.lib.actions.SpawnResult.MetadataLog;
 import com.google.devtools.build.lib.actions.SpawnResult.Status;
+import com.google.devtools.build.lib.server.FailureDetails;
+import com.google.devtools.build.lib.server.FailureDetails.FailureDetail;
+import com.google.devtools.build.lib.server.FailureDetails.Spawn.Code;
 import com.google.devtools.build.lib.vfs.Path;
 import com.google.devtools.build.lib.vfs.util.FileSystems;
 import com.google.protobuf.ByteString;
@@ -39,6 +42,10 @@
             .setStatus(SpawnResult.Status.TIMEOUT)
             .setWallTime(Duration.ofSeconds(5))
             .setExitCode(SpawnResult.POSIX_TIMEOUT_EXIT_CODE)
+            .setFailureDetail(
+                FailureDetail.newBuilder()
+                    .setSpawn(FailureDetails.Spawn.newBuilder().setCode(Code.TIMEOUT))
+                    .build())
             .setRunnerName("test")
             .build();
     assertThat(r.getDetailMessage("", "", false, false))
@@ -51,6 +58,10 @@
         new SpawnResult.Builder()
             .setStatus(SpawnResult.Status.TIMEOUT)
             .setExitCode(SpawnResult.POSIX_TIMEOUT_EXIT_CODE)
+            .setFailureDetail(
+                FailureDetail.newBuilder()
+                    .setSpawn(FailureDetails.Spawn.newBuilder().setCode(Code.TIMEOUT))
+                    .build())
             .setRunnerName("test")
             .build();
     assertThat(r.getDetailMessage("", "", false, false)).contains("(failed due to timeout.)");
@@ -75,7 +86,7 @@
   }
 
   @Test
-  public void getSpawnResultLogs() throws Exception {
+  public void getSpawnResultLogs() {
     SpawnResult.Builder builder =
         new SpawnResult.Builder().setStatus(Status.SUCCESS).setExitCode(0).setRunnerName("test");