Code change:
6.8. <del> A publisher issues a "SUBSCRIBE_FIN" message to all subscribers indicating it is done publishing objects on the subscribed track. </del> <ins> A publisher issues a "SUBSCRIBE_DONE" message to indicate it is done publishing Objects for that subscription.  The Status Code indicates why the subscription ended, and whether it was an error. </ins> <del> The format of "SUBSCRIBE_FIN" is as follows: </del> <ins> The format of "SUBSCRIBE_DONE" is as follows: </ins> Subscribe ID: Subscription identifier as defined in message- subscribe-req. <del> ContentExists: 1 if an object has been published for this subscription, 0 if not.  If 0, then the Final Group and Final Object fields will not be present. Final Group: The largest Group ID sent by the publisher in an OBJECT message in this track. Final Object: The largest Object ID sent by the publisher in an OBJECT message in the "Final Group" for this track. 6.9. A publisher issues a "SUBSCRIBE_RESET" message to all subscribers indicating there was an error publishing to the given track and subscription is terminated. The format of "SUBSCRIBE_RESET" is as follows: Subscribe ID: Subscription Identifier as defined in message- subscribe-req. Error Code: Identifies an integer error code for subscription failure. </del> <ins> Status Code: An integer status code indicating why the subscription ended. </ins> Reason Phrase: Provides the reason for subscription error.

Related discussion:
text: Into SUBSCRIBEDONE. I didn't remove the SUBSCRIBEERROR message in favor of SUBSCRIBE_CLOSED as NAME suggested in this PR. Addresses some comments in , but possibly not all
So my notes from this discussion. CLOSE is confusing with QUIC layer. People seemed to prefer UNSUBSCRIBE over SUBSCRIBE_CLOSE. I love the move aware from RST and FIN as naming.
Propose names from my understanding of discussion call Announce (send by publisher) , AnnouceOK, AnnouceError UnAnnounce (send by publisher) UnAnnounceOK, UnAnnounceError AnnouceEnd ( sent by thing that received Annouce) , AnnouceEndOK, AnnouceEndOK Subscribe (send by subscriber) , SubscribeOK, SubscribeError UnSubscribe (send by subscriber) , SubscribeOK, SubscribeError SubscribeEnd (send by thing that received subscriber), SubscribeOK, SubscribeError Mostly trying to get rid of FIN / RST and have different names for the messages that flow in opposite directions.
I don't like the name of the different messages used to terminate. I'd rather have one message that transitions to the terminal state, with an optional error code and final group/object. IMO the subscription flow: And the ANNOUNCE flow mirrors: The brackets mean a message is optional. The sender is responsible for creating and the receiver is responsible for closing, possibly at the bequest of the sender (like QUIC's STOP_SENDING).
has been merged, adding yet another term (CANCEL), but I figured we'd clean that up with this issue.
Since we are bikeshedding, I prefer ANNOUNCE_RESCIND instead of CANCEL, since an announce is more of a declarative statement than an active request from the sender.
Heh and UNANNOUNCE and UNSUBSCRIBE stick out because they don't share the same prefix.
I like the names being proposed as they help make make is easier to understand. I do want to separate out one issue. The STOP / CLOSE type thing happens way after the initial SUBSCRIBE thus it can end up in a situation where auth has expired or something else has gone wrong this I like the current design that allows an OK or ERROR to be returned for those. I think it is also key for sender of the things stoping the subscribe to know that the other side has acted on that so we need the OK.