Firstly, as a user it's not up to me to find the solution
Agreed. But, you did suggest a solution that is completely impossible. The bootloader has no way of knowing whether the stream that contains !!! contains them because they were meant to trigger the functionality that they are a key for, or if they are embedded in the data stream as a result of the compiler finding them in a string literal.
Now, I'll grant you that using %%% to trigger that functionality would have probably been better than using !!!, since so many people are so excited when things finally work, and I can't recall a single instance where someone posted code containing "%%%".
And, I'll grant you that some documentation of the fact that !!! meant something to one of
should have been generated.
However, I would be astonished if no solution was possible - which is what you seem to be implying by your question.
The bootloader certainly can't tell the difference between code that a knowledgeable developer generated that contains !!! and code that an overexcited newbie generated that contains !!!. There is no compiler setting that defines skill level, and, even of there were, the IDE doesn't provide a way of setting compiler options. And, it certainly can't tell.
If the bug can't be removed from the bootloader for some reason, it may be possible for the bootloader to indicate to the IDE when it has entered this diagnostic mode, which would enable the IDE to report it to the user in some meaningful way and not just leave them poking around in the guts of hung processes trying to guess what's broken.
That might be the case, but it would certainly increase the size of the bootloader, and would not really help unless the displayed message was very explicit. Something like:
"Hey, I know you're excited that your code finally does what you want, but !!! means something to me that you probably didn't intend for me to do. Signed, the bootloader".
Then, how would you convey to the bootloader that you wanted it to continue, because you knew what you were doing, vs. conveying the need to stop loading the code?
How would you restore the code that was previously there, vs. leaving the chip with no code to run?
If the developers can't figure out a way to achieve that, then surely at least it ought to be possible for the IDE to notify the user when they were attempting to download a sketch which the bootloader is not expected to handle correctly.
This presupposes that the IDE knows, or has some way of learning, which bootloader is loaded on the chip, and that each bootloader has some specific ID that is unique. I don't know whether either supposition is true.
And if they can't even manage that, then would it be asking too much to describe the problem in the trouble-shooting guide?
Certainly not, but, given how much trouble we have getting people to even be aware that it exists, is this really going to help?
Edit: Minor change to one sentence, as highlighted.