anchor.diff:      }
       process.stdin.write('q');
       return -1; // discarded
  -  }).catchError((Object error) { /* ignore the error here, it'll be reported on the next line */ }));
  +  }).catchError((Object error) { /* ignore errors here, they will be reported on the next line */ }));
     final int exitCode = await process.exitCode;
     if (streamingLogs) {
       print('${stamp()} (process terminated with exit code $exitCode)');
  
positive.code:   if (debug) {
      processTimeout();
    } else {
      timeout = Timer(expectedMaxDuration ~/ 2, processTimeout);
    }
    process.stdout.transform<String>(utf8.decoder).transform<String>(const LineSplitter()).listen(processStdout);
    process.stderr.transform<String>(utf8.decoder).transform<String>(const LineSplitter()).listen(processStderr);
    unawaited(process.exitCode.timeout(expectedMaxDuration, onTimeout: () {
      print('${stamp()} (process is not quitting, trying to send a "q" just in case that helps)');
      print('(a functional test should never reach this point)');
      final LogLine inLog = LogLine('stdin', stamp(), 'q');
  
negative.code:       }
        nextTransition += 1;
        timeout?.cancel();
        timeout = Timer(expectedMaxDuration ~/ 5, processTimeout); // This is not a failure timeout, just when to start logging verbosely to help debugging.
      }
    }
    void processStderr(String line) {
  