anchor.diff:    // TODO: implement parameters
     @override
     Map<String, dynamic> get parameters => {
  -        'dialog': {'markup': _reply.dialog._markup},
  +        'speech': {'markup': _reply.speech._markup},
           'markup': _reply._markup
         };
   }
  
positive.code: }
  
  class Reply {
    final Speech dialog;
    final String _markup;
    final _uses = new StreamController.broadcast(sync: true);
  
  
negative.code: import 'package:august/august.dart';
  
  class Dialog {
    final _dialog = new StreamController<Speech>.broadcast(sync: true);
  
    // TODO: figure out defaults
    Speech narrate(String markup, {Scope scope}) {
      var narration = new Speech(markup, scope, '', '');
      narration._scope.onEnter.listen((_) => _dialog.add(narration));
      return narration;
    }
  
    // TODO: figure out default
    Speech add(String markup,
        {String speaker: '', String target: '', Scope scope}) {
      var speech = new Speech(markup, scope, speaker, target);
      speech._scope.onEnter.listen((_) => _dialog.add(speech));
      return speech;
    }
  
    Voice voice({String name: ''}) => new Voice(name, this);
  
    Stream<Speech> get _onAddSpeech => _dialog.stream;
  }
  
  class Voice {
    String name;
  
    final Dialog _dialog;
  
    Voice(this.name, this._dialog);
  
    Speech say(String markup, {String target, Scope scope}) =>
        _dialog.add(markup, speaker: name, target: target, scope: scope);
  }
  
  class Speech {
  