In my opinion yes, analogWrite() is broken, and was broken from the very beginning.
It does work "as documented"; however, analogWrite() does not create an analog output voltage so you can't read the output from analogWrite() with analogRead().
analogWrite() creates a PWM output frequency that when used with something like an LED will trick the human eye to see a variable brightness.
analogWrite() was a horrible name for a function that outputs a digital pwm signal.
Also, analogWrite() uses a digital pin# while analogRread() uses an analog pin# the two numbering spaces are different and represent different pins. i.e. analog pin #2 is not the same as digital pin #2.
And this is why in my opinion analogWrite() was broken from the very beginning......
What would have been better, in my opinion would have been to have digitalWrite() also do pwm.
It could have been done, by using LOW to mean set output to GND and HIGH to mean set output to Vcc, and then as long as HIGH was defined properly, (255, instead of the 1 that it currently is), then any value between low and HIGH could have been a pwm output.