Say we're using a mode derived from comint that implements completion by using the comint redirection functionality to send commands to the process associated with the comint buffer. Say we have TAB bound to complete-symbol. If the user presses TAB (to create a list of completions) and then immediately presses RET to run comint-send-input, we send the input to the subprocess, but don't wait for a reply. Then we run post-command-hook; completion-in-region--postch is on the list of hooks to run. This function runs completion-in-region-mode--predicate, which makes a hidden call to the subprocess; this hidden call involves writing a command waiting for a reply. But because we just sent the *user* line in comint-send-input, we might actually read the response to *that* line instead of the internal completion command, causing an error. The response to the internal completion command then appears in the comint buffer. Why can't we do the completion-in-region--postch stuff in pre-command-hook?