anchor.diff:        );
         final hasIndexHtml = await File(p.join(outputDir, 'index.html')).exists();
         final hasIndexJson = await File(p.join(outputDir, 'index.json')).exists();
  -      return DartdocResult(pr, pr.exitCode == 15, hasIndexHtml, hasIndexJson);
  +      final stdoutStr = pr.stdout.toString();
  +      return DartdocResult(
  +        pr,
  +        pr.exitCode == 15 ||
  +            pr.exitCode == -9 ||
  +            (pr.exitCode != 0 && stdoutStr.contains('timeout')),
  +        hasIndexHtml,
  +        hasIndexJson,
  +      );
       }
   
       final sw = Stopwatch()..start();
  
positive.code:     final hasContent = r.hasIndexHtml && r.hasIndexJson;
  
      if (r.processResult.exitCode != 0) {
        if (hasContent || _isKnownFailurePattern(_mergeOutput(r.processResult))) {
          logger.info('Error while running dartdoc for $job (see log.txt).');
        } else {
          final output = _mergeOutput(r.processResult, compressStdout: true);
  
negative.code:     sw.stop();
      logger.info('Running dartdoc for ${job.packageName} ${job.packageVersion} '
          'completed in ${sw.elapsed}.');
      if (r.wasTimeout) {
        r = await runDartdoc(isReduced: true);
      }
  
  