    msg-type
    msg-body
    (*get-envelope-id*)])
+
+(s/defn maybe-conj
+  "'conj 'new-node-contact-address into 'coll as long as
+  'this-node-contact-address and 'new-node-contact-address are
+  different."
+  [coll :- #{NodeContactAddressSchema}
+   this-node-contact-address :- NodeContactAddressSchema
+   new-node-contact-address :- NodeContactAddressSchema]
+  (if (= this-node-contact-address new-node-contact-address)
+    coll
+    (conj coll new-node-contact-address)))
 
 (s/defn receive-msg-new-subscription :- CommUpdateSchema
   "Forward the 'subscription to every :downstream node, duplicating

               :node node
               :subscription subscription
               :connection-redundancy connection-redundancy)
  (let [node (update node :upstream conj subscription)
        new-messages (if (empty? downstream)
                       ;; There is no 'downstream. No messages are needed, because the
                       ;; 'subscription node will already have 'node in its
                       ;; :downstream.
                       []

                       ;; Forward subscription to :downstream.
                       (let [downstream (seq downstream)
                             downstream+ (reduce (fn [x _] (conj x (rand-nth* downstream)))
                                                 downstream
                                                 (range connection-redundancy))]
                         (mapv
                          (fn [node-id]
                            [:message-envelope
                             node-id
                             :forwarded-subscription
                             subscription
                             (*get-envelope-id*)])
                          downstream+)))]
    [node new-messages]))

(s/defn do-probability :- s/Bool
  "'rand is inclusive of 0 and exclusive of 1, so our test should not have '=."

               :receive-msg-new-upstream-node
               :node node
               :upstream-node-contact-address upstream-node-contact-address)
  [(update node :upstream maybe-conj (get-in node [:self :id]) upstream-node-contact-address)
   []])

(s/defn send-msg-new-upstream-node :- MessageEnvelopeSchema
