Mike,
Maybe lets establish the definitions of the terms conversation and message: a conversation is a series of messages that have one (1) root message and all other messages belong to that conversation because they are either a reply or forward that can be traced back to the root message. In other words, it is a tree structure. The root message can be a sent message or a received message.
Interesting in that context is the phrase "messages above" that was used by you. A conversation is chronologically ordered with the newest message determining the bottom of a list view of what essentially is a tree. Not sure my abstractions/definitions of conversation and message work, as displaying a tree structure in a list form as Geary does it gets confusing potentially when chronologically ordering it. Other email clients use a different approach that truly depicts the tree structure of a conversation.
root message (received email)
| - reply to root
| | - [received] reply to reply
| - forward of root
| - [received] reply to the forward
Now in this rather simple example of a conversation that started the conversation with a received message, is the list truly just a flattened representation of a tree structure in chronological order? The actions taken in above example (reply and forward) and receiving an answer to them could be chronologically interleaved in any possible combination. I think we need to agree that the list is a truly chronological representation of messages in a conversation only, regardless of where in the tree a given message may be. I would ask you to correct me if it is not. With that definition however, when an action is taken on a message in the middle of the conversation, marking something then applies to the message the action is taken on itself AND all older messages regardless of where in the tree a given message resides.
BTW, I have examples where Gmail web client AND Apple Mail in iOS and Geary all interpret which messages make up a conversation differ. I have additionally examples where the count of unread messages in a 'folder' respectively 'label' between Gmail web client and Geary differ based on where in the conversation the action "Mark unread from here" was taken. Very confusing. Gmail web client does apply by far the best and most intuitive approach for both, keeping messages tied to a conversation as well as counting unread messages that have the same label. Both are topics for separate conversations, no pun intended.
Back to the topic at hand using above definitions and abstractions.
Re your question of how to apply "marking" to a conversation as a whole:
Like your outline:
- Archiving would mark ALL messages in the conversation (as Archive is an action that can be taken on a conversation as a whole only anyway in Geary)
- Replying and Forwarding a conversation as a whole would mark ALL messages in the conversation (as taking that action on the conversation as a whole is in reality applying that action to the last chronological message respectively newest message in the conversation, so it is in fact in line with, or said differently, it is no different than the logic of applying said actions to a message somewhere in the middle of the conversation: taking that action will mark the message that the action is taken on AND all above messages; taking that action on the conversation as a whole just happens to do it on the last message and all above messages, the implemented logic should work for all cases with that and does not need to distinguish if the action was taken on the conversation or a message in the middle of the conversation)
- Replying and Forwarding a specific message in the middle of a conversation would mark the message that the action is taken on AND all messages above in the conversation
Like your naming: "Mark conversation read when replying, forwarding, or archiving." as "replying" is inclusive of "reply" [to sender only] and "reply all". However, I would replace "conversation" with "messages" because as proposed by you, it may not mark an entire conversation if the action is taken on a message in the middle of the conversation, so using the term "conversation" in the feature description of the toggle's option would be misleading, hence better would be: "Mark messages read when replying, forwarding or archiving". As you leave out "deleting" from the description of the toggle, I am inferring that deleting a conversation would not mark the messages of the conversation as read. I would be ok with that, but I would also be ok with an implementation where deleting marks them as read. In the latter case, the description of the toggle should be: "Mark messages read when replying, forwarding, archiving or deleting.".
Axel