anchor.diff:  import 'package:august/august.dart';
   
   class Dialog {
  -  final _dialogs = new StreamController<Speech>.broadcast(sync: true);
  +  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((_) => _dialogs.add(narration));
  +    narration._scope.onEnter.listen((_) => _dialog.add(narration));
       return narration;
     }
   
     // TODO: figure out default
     Speech add(String markup,
         {String speaker: '', String target: '', Scope scope}) {
  -    var dialog = new Speech(markup, scope, speaker, target);
  -    dialog._scope.onEnter.listen((_) => _dialogs.add(dialog));
  -    return dialog;
  +    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 _onAddDialog => _dialogs.stream;
  +  Stream<Speech> get _onAddSpeech => _dialog.stream;
   }
   
   class Voice {
     String name;
   
  -  final Dialog _dialogs;
  +  final Dialog _dialog;
   
  -  Voice(this.name, this._dialogs);
  +  Voice(this.name, this._dialog);
   
     Speech say(String markup, {String target, Scope scope}) =>
  -      _dialogs.add(markup, speaker: name, target: target, scope: scope);
  +      _dialog.add(markup, speaker: name, target: target, scope: scope);
   }
   
   class Speech {
  
positive.code: }
  
  class Reply {
    final Speech dialog;
    final String _markup;
    final _uses = new StreamController.broadcast(sync: true);
  
  
negative.code: }
  
  class DialogUi {
    final Dialog _dialog;
    final Sink<Interaction> _interactions;
  
    DialogUi(this._dialog, this._interactions);
  
    Stream<UiSpeech> get onAdd =>
        _dialog._onAddSpeech.map((d) => new UiSpeech(d, _interactions));
  }
  
  class UiSpeech {
    final Speech _speech;
    final Sink<Interaction> _interactions;
  
    UiSpeech(this._speech, this._interactions);
  
    String get markup => _speech._markup;
    String get speaker => _speech._speaker;
    String get target => _speech._target;
  
    Stream<UiSpeech> get onRemove => _speech._onRemove.map((_) => this);
    Stream<UiReply> get onReplyAvailable =>
        _speech._onReplyAvailable.map((r) => new UiReply(r, _interactions));
  }
  
  class UiReply {
  