# File lib/ruote/exp/fe_concurrence.rb, line 332
    def reply(workitem)

      workitem = Ruote.fulldup(workitem)
        #
        # since workitem field merging might happen, better to work on
        # a copy of the workitem (so that history, coming afterwards,
        # doesn't see a modified version of the workitem)

      if h.wait_for && tag = workitem['fields']['__left_tag__']
        h.wait_for.delete(tag)
      end

      over = h.over
      h.over = over || over?(workitem)

      keep(workitem)
        # is done after the over? determination for its looks at 'winner'

      if (not over) && h.over
        #
        # just became 'over'

        reply_to_parent(nil)

      elsif h.over && h.remaining == 'wait'

        reply_to_parent(nil)

      elsif h.children.empty?

        do_unpersist || return

        @context.storage.put_msg(
          'ceased',
          'wfid' => h.fei['wfid'], 'fei' => h.fei, 'workitem' => workitem)
      else

        do_persist
      end
    end