Some comments/things I do differently. Feel free to take it or leave it.
What’s a routine? Convention in C# is to call them methods. In general I name method parameters the same way as local and class variables. I reserve the underscore for backing variables which should only be accessed via properties. You don’t seem to have a convention for backing variables anywhere?
Because all consuming code treats properties as variables, I prefer to use the same convention as variables. Using the method convention implies that the property should be invoked. This convention offers several advantages, the most obvious is that you can convert a variable to a property without needing to change any consuming code.
Controversial choice 
Sometimes useful. But frequently more effort is required to maintain then benefit is derived from this one.
Should be stronger. ‘Inspector fields should only be used to set up initial conditions. These should always be private and marked with the [SerialiseField] attribute. If needed, these can be exposed to other scripts via public properties. Avoid changing inspector fields via script, as this can lead to unexpected behavior. Inspector fields should not be used to provide debug information to developers.’
Needs to be stronger. ‘Do not use a constructor in classes that inherit from MonoBehaviour. Instead use Awake for internal initialization, and start for external initialization.’
Mention that blank Unity methods should not be included. If a Unity method is blank, delete it.
As an alternative, you can explicitly assign values to your enums, which will prevent inspector changes when the enum changes.
I would suggest bracketing the == operator here. Its not super quick to read otherwise.
Its frequently better to start with the if with the least performant check. For example checking if a target is in range is cheaper then checking if a target is in line of site. (It might be worth making this a separate best practice line, its not perfectly related to the one I quoted.)
Ugh. I hate this style. It doesn’t really add much to code readability. And it is fairly costly to maintain (and fairly easy to get the comments out of sync with the brackets). Every modern IDE has bracket matching functionality. Use it.
Or better yet ‘Don’t call StartCoroutine on another Component. If you need to do this, create a public method on the other Component that will call StartCoroutine. Each Component should be responsible for starting and ending its own co routines’.
You should also make a comment about calling StopAllCoroutines, which should normally only be done in a few situations, like object pooling.
I’m not super attached to any of these opinions. Feel free to use it as a starting point for discussion.