anchor.diff:      send_message(Message, Vat).
   
   %% ===================================================================
  +handle_finish(Finish, Vat) ->
  +    Id = ecapnp:get(questionId, Finish),
  +    Release = ecapnp:get(releaseResultCaps, Finish),
  +    gen_server:call(Vat, {finish, Id, Release}).
  +
  +%% ===================================================================
  +handle_release(Release, Vat) ->
  +    Id = ecapnp:get(id, Release),
  +    Count = ecapnp:get(referenceCount, Release),
  +    gen_server:call(Vat, {release, Id, Count}).
  +
  +%% ===================================================================
   
   %% ===================================================================
   %% common utils
  
positive.code:               gen_server:reply(From, (State#state.restorer)(ObjectId))
        end),
      {noreply, State};
  handle_call(stop, _From, State) ->
      {stop, normal, ok, State}.
  
  
negative.code:                        questions = Qs#questions{
                                       promises = Ps1
                                      }},
              %% releaseResultCaps is true by default, which is fine
              %% until we've implemented sending release messages
              Finish = new_message(finish),
              ok = ecapnp:set(questionId, Id, Finish),
              {noreply, send_message(Finish, State1)}
      end.
  
  %% ===================================================================
  purge_answer(Id, false, State) ->
      set_answer_result(Id, finish, State);
  purge_answer(Id, true, State) ->
      case find(Id, State#state.answers) of
          false -> State;
          {ok, Res} ->
              {ok, Caps} = ecapnp_obj:get_cap_table(Res),
              State1 = release_caps(Caps, State),
              purge_answer(Id, false, State1);
          {pending, Id} ->
              purge_answer(Id, false, State)
      end.
  
  
  %% ===================================================================
  