code: public Task<HttpResponse> build(final String hash, final InputStream body)
        throws IOException {
      if (hash == null) {
        // Missing hash
        String content = "Missing hash.";
        LOG.info(content);
        return Task.value(new HttpResponse(HttpServletResponse.SC_BAD_REQUEST, content));
      } else {
        // Have cache
        if (_hashManager.contains(hash)) {
          LOG.info("hash found in cache: " + hash);
          return Task.value(new HttpResponse(HttpServletResponse.SC_OK, ""));
        } else {
          if (body == null) {
            // Missing body
            String content = "Missing body.";
            LOG.info(content);
            return Task.value(new HttpResponse(HttpServletResponse.SC_BAD_REQUEST, content));
          } else if (_dotLocation == null) {
            // Missing dot
            String content = "Missing dot.";
            LOG.info(content);
            return Task.value(new HttpResponse(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, content));
          } else {
            // Build task
            final Task<Exec.Result> buildTask = getBuildTask(hash, body);
            return buildTask.transform("result", result -> {
              Integer status = null;
              String content = null;
              if (result.isFailed()) {
                // Task fail
                status = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
                content = result.getError().toString();
              } else {
                // Task success
                switch (result.get().getStatus()) {
                  // Success
                  case 0:
                    _hashManager.add(hash);
                    status = HttpServletResponse.SC_OK;
                    content = "";
                    break;
                  // Timeout
                  case 137:
                    status = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
                    content = "graphviz process was killed because it did not finish within " + _timeoutMs + "ms";
                    break;
                  // Unknown
                  default:
                    status = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
                    content = writeGenericFailureInfo(result.get());
                    break;
                }
              }
              // Clean up cache
              _inFlightBuildTasks.remove(hash, buildTask);
              return Success.of(new HttpResponse(status, content));
            });
          }
        }
      }
    }
docs: Return task that has general HTTP status and body information based on the build task's result.