anchor.diff:        return list.first;
       }
   
  -    return Script.fromComponents(
  -        name ?? list.map((script) => script.name).join(" | "), () {
  -      for (var i = 0; i < list.length - 1; i++) {
  -        list[i].stdout.pipe(list[i + 1].stdin);
  -      }
  -
  -      return ScriptComponents(
  -          list.first.stdin,
  -          // Wrap the final script's stdout and stderr in [SubscriptionStream]s
  -          // so that the inner scripts will see that someone's listening and not
  -          // try to top-level the streams' output.
  -          SubscriptionStream(list.last.stdout.listen(null)),
  -          SubscriptionStream(list.last.stderr.listen(null)),
  -          Future.wait(list.map((script) => script.exitCode)).then((exitCodes) =>
  -              exitCodes.lastWhere((code) => code != 0, orElse: () => 0)));
  -    });
  +    for (var i = 0; i < list.length - 1; i++) {
  +      list[i].stdout.pipe(list[i + 1].stdin);
  +    }
  +
  +    return Script._(
  +        name ?? list.map((script) => script.name).join(" | "),
  +        list.first.stdin,
  +        // Wrap the final script's stdout and stderr in [SubscriptionStream]s so
  +        // that the inner scripts will see that someone's listening and not try
  +        // to top-level the streams' output.
  +        SubscriptionStream(list.last.stdout.listen(null)),
  +        SubscriptionStream(list.last.stderr.listen(null)),
  +        Future.wait(list.map((script) => script.exitCode)).then((exitCodes) =>
  +            exitCodes.lastWhere((code) => code != 0, orElse: () => 0)));
     }
   
     /// Creates a script from existing [stdin], [stdout], [stderr], and [exitCode]
  
positive.code:   /// See also [operator |], which provides a syntax for creating pipelines two
    /// scripts at a time.
    factory Script.pipeline(Iterable<Script> scripts, {String? name}) {
      var list = scripts.toList();
      if (list.isEmpty) {
        throw ArgumentError.value(list, "script", "May not be empty");
  
negative.code:     });
  
      _childScripts?.add(_doneWithoutError);
    }
  
    /// Throws a [StateError] if this is running in a closed [Script.capture]
    /// block.
    static void _checkCapture() {
      _childScripts;
    }
  
    /// Returns the current [Script.capture] block's [FutureGroup] that tracks
  