Recent iterations have added more helpful errors, but maybe not helpful enough.
Deprecating the `.` and `#` issue isn't hard, I could just raise a warning and ignore the bad character for now. I personally view this issue as a bug as it doesn't feel like a choice by design as much as omission, and bad patterns, but I could still technically address this without too much issue.
Deprecating the attribute quote issue also isn't hard. I simply need a more relaxed attribute pattern that I check after the strict one fails. Simply raise an deprecation warning and parse it as usual.
As for deprecating the last issue in regards to relative, relational combinators, this one may not be as straight forward. It isn't hard to inject ":scope" in these cases, but I would have to see how the old selector method handled leading whitespace: " div". If it treated that as a relational combinator, I simply cannot account for that in all the places it goes awry. Whitespace has no significance except between two selectors, and in the case of ":has()" it is assumed to be looking for a descendant unless ">", "+", or "~" is explicitly set, leading whitespace technically means nothing to the parser here, it is more the absence of other combinators that it triggers off of. I'll have to look into this.
It may be hard for BS4 to simply catch the exception and simply format it to not fail, as these patterns can be quite complex, but I could add a flag to SoupSieve that allows it to run in a...less strict state. We could raise the error on the first attempt, and BS4 could use the less strict flag on the second attempt.
I guess had this been a BS5 release, I could argue that people are going to have to deal with it, but with a BS4.7 release it is harder to argue that...so maybe I should just add the deprecations...even if I die a little on the inside :).