anchor.diff:      return reply;
     }
   
  -  Stream<Dialog> get _onRemove => _scope.onExit.map((_) => this);
  +  Stream<Speech> get _onRemove => _scope.onExit.map((_) => this);
     Stream<Reply> get _onReplyAvailable => _replies.stream;
   }
   
   class Reply {
  -  final Dialog dialog;
  +  final Speech dialog;
     final String _markup;
     final _uses = new StreamController.broadcast(sync: true);
   
  
positive.code: }
  
  class DialogUi {
    final Dialogs _dialogs;
    final Sink<Interaction> _interactions;
  
    DialogUi(this._dialogs, this._interactions);
  
    Stream<UiDialog> get onAdd =>
        _dialogs._onAddDialog.map((d) => new UiDialog(d, _interactions));
  }
  
  class UiDialog {
    final Dialog _dialog;
    final Sink<Interaction> _interactions;
  
    UiDialog(this._dialog, this._interactions);
  
    Stream<UiDialog> get onRemove => _dialog._onRemove.map((_) => this);
    Stream<UiReply> get onReplyAvailable =>
        _dialog._onReplyAvailable.map((r) => new UiReply(r, _interactions));
  }
  
negative.code: 
    final _replies = new StreamController<Reply>.broadcast(sync: true);
  
    Speech(this._markup, this._scope, this._speaker, this._target);
  
    Reply addReply(String markup, {Scope scope: const Always()}) {
      var reply = new Reply(this, markup, scope);
  