anchor.diff:  
     Stream get onUse => _uses.stream;
   
  -  Reply(this.speech, this._markup, Scope scope) {
  +  Reply(this.speech, this._markup, this._hasUses, Scope scope) {
       _available = new ScopeAsValue(owner: this)
         ..within(new AndScope(_hasUses, scope));
     }
  
positive.code: }
  
  class UseReplyAction implements Interaction {
    final Reply _reply;
  
    UseReplyAction(this._reply);
  
    // TODO: implement moduleName
    @override
    String get moduleName => null;
  
    // TODO: implement name
    @override
    String get name => null;
  
    // TODO: implement parameters
    @override
    Map<String, dynamic> get parameters => {
          'speech': {'markup': _reply.speech._markup},
          'markup': _reply._markup
  
negative.code: 
    final _replies = new StreamController<Reply>.broadcast(sync: true);
  
    /// Lazily initialized scope which all replies share, making them mutually
    /// exclusive by default.
    // TODO: Support non mutually exclusive replies?
    _CountScope _replyUses;
  
    Speech(this._markup, this._scope, this._speaker, this._target);
  
    Reply addReply(String markup, {Scope scope: const Always()}) {
      if (_replyUses == null) {
        // TODO parameterize max?
        _replyUses = new _CountScope(1);
      }
      var reply = new Reply(this, markup, _replyUses, scope);
      reply.availability.onEnter.listen((_) => _replies.add(reply));
      return reply;
    }
  