anchor.diff:      });
   
       _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
  
positive.code:   /// authors are expected to primarily use [Script] and [Script.capture].
    factory Script.fromComponents(
        String name, FutureOr<ScriptComponents> callback()) {
      // Eagerly throw an error if the surrounding [Script.capture] has closed, so
      // that we don't do any of the work in [callback] if it is.
      _childScripts;
  
      // TODO: there are too few guarantees about when a stream will actually get
      // listened. Even piping it doesn't immediately listen. I think we need to
  
negative.code:   /// See also [operator |], which provides a syntax for creating pipelines two
    /// scripts at a time.
    factory Script.pipeline(Iterable<Script> scripts, {String? name}) {
      _checkCapture();
  
      var list = scripts.toList();
      if (list.isEmpty) {
        throw ArgumentError.value(list, "script", "May not be empty");
  